⑴ 關於C語言中的#ifndef。。。endif 的用法,求高手詳解
#ifndef #endif 相當於括弧括起的一段東西。
如果沒有定義那個宏,則執行 這段東西。
如果沒有定義那個宏,則 跳過 這段東西。
---------------
上面那段東西,如果前面有:
#define 標識符1
上面那段東西 變成:
else
{
}
------------
上面那段東西,如果前面沒有定義標識符1 ,上面那段東西 變成:
程序段 1
else
{
程序段 2
else if{
程序段3 }
else {
程序段3
}
}
--------------------
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
用於避免重復包含 stdio.h 例如:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
第一個 #include <stdio.h> 執行後 就有了 #define _STDIO_H_
遇到第2 個 #include <stdio.h> 它的第一行 有
#ifndef _STDIO_H_ 保護。 因為有了 #define _STDIO_H_ 不能通過,第二個 #include <stdio.h> 不會重復執行 。
⑵ 頭文件中的 ifndef/define/endif 干什麼用
#ifndef、#define、#endif為C語言的3條預處理語句,主要用作條件編譯。先介紹一下條件編譯:
一般情況下,源代碼文件中的所有行都參加編譯,但有時需要指定一部分代碼在某個條件下才被編譯,這就叫做條件編譯。
條件編譯發生在預處理階段,在C中,主要通過#if、#elif、#else、#ifdef、#ifndef、#endif來給一段代碼附加上編譯條件,然後預處理器收集滿足條件的可以進行編譯的代碼,這樣經過預處理,不滿足條件的代碼就不會被編譯。
這3個預處理語句的功能分別為:
#ifndefsymbol
語句塊
#endif
如果沒有定義符號symbol,那麼就編譯下面指定的語句塊,用endif來表示條件編譯語句的結尾。
#definesymbol
定義一個符號symbol。
這三個預處理語句用在一起可以解決頭文件被重復引用的問題:一個.c源程序中可能引用了多個頭文件,而被源程序引用的頭文件又有可能存在引用關系,比如a.h引用了b.h,然後在源程序中同時引用a.h和b.h,就會產生這個問題,這時編譯器會產生符號重定義之類的錯誤。為了防止該問題,就需要在頭文件中加入以下語句:
#ifndefsymbol
#definesymbol
頭文件包含的內容
#endif
這樣即可防止該頭文件被重復引用。symbol一般採取以下方式命名:_頭文件名_H,當然也可採取其他方式。
另外,對於有的編譯器也可以在頭文件中加入#pragma once來防止頭文件被重復引用