當前位置:首頁 » 編程語言 » c語言ifndef

c語言ifndef

發布時間: 2023-01-31 14:12:36

❶ 關於c語言中的#ifndef。。。endif 的用法,求高手詳解

#ifndef假如沒有定義,那麼進行宏定義。
#endif結束宏定義。
這個是為了避免頭文件重復包含而定義的,一般這個宏的定義方式為__頭文件名__H_
比方說你#include進來一個stdio.h,再#include進來一個string.h。也許在string.h頭文件里又include了stdio.h。這樣你的程序中就include了兩個stdio.h。定義了兩個printf函數等等。
這就麻煩了,編譯會出錯不說,就算編譯過了也是浪費資源
加了一個#ifndef
_STDIO_H的話。在#include進來的string.h中如果再試圖include一遍stdio.h的話,由於事先在第一個stdio.h中已經定義了_STDIO_H這個宏。所以不滿足#ifndef
_STDIO_H這個條件,就不會編譯第二次了。
#define
後面不一定要加兩個字元串。一個也行,加一個字元串如#define
_STDIO_H
,
#define
DEBUG
等等,一般在編譯前用來做開關。控制編譯部分。上面所說的頭文件中是一個例子。再舉一個查錯的例子
#define
DEBUG
...
...
#ifdef
DEBUG
fprintf(
stderr
,
"Debug
Message\n
"
);
#endif
...
當你程序完成之後。可以把#define
DEBUG一行用注釋屏蔽掉。這樣在編譯的時候就不會把debug部分也編譯進去了。

❷ C語言有個IFNDEF開始用來做

定義FLAG為1
所以 #ifndef不會被執行, 而是編譯#else部分
即#define M 3
於是 輸出為
2*M+6
注意 字元串中的M不會被替換。

❸ #ifndef的用法

#ifndef是宏定義裡面的一種,用來防止防止頭文件的重復包含和編譯。

比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,於是問題來了,大量的聲明沖突。

如果把頭文件的內容都放在#ifndef和#endif中,不管你的頭文件會不會被多個文件引用,你都要加上這個,就可以避免沖突的問題。

#ifndef可以根據是否已經定義了一個變數來進行分支選擇,一般用於調試等等.實際上確切的說這應該是預處理功能中三種(宏定義,文件包含和條件編譯)中的一種——條件編譯。 C語言在對程序進行編譯時,會先根據預處理命令進行「預處理」。C語言編譯系統包括預處理,編譯和鏈接等部分。

(3)c語言ifndef擴展閱讀:

#ifndef一般格式是這樣的:

#ifndef <標識>

#define <標識>

......

#endif

<標識>在理論上來說可以是自由命名的,但每個頭文件的這個「標識」都應該是唯一的。標識的命名規則一般是頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h

#ifndef _STDIO_H_

#define _STDIO_H_

......

#endif

❹ C語言 ifndef什麼意思(作用)#define STR_LEN 30 什麼意思

#ifndef x 意思就是如果x沒有定義,則執行#endif之前的程序,如果定義就跳過。
#define STR_LEN 30 就是宏定義,程序中只要出現 STR_LEN 就用30代替,使程序直觀

❺ C++#ifndef與#ifdef的區別是什麼

一、使用場景不同:

#ifndef使用場景為:

1、頭文件中使用,防止頭文件被多重調用。

2、作為測試使用,省去注釋代碼的麻煩。

3、作為不同角色或者場景的判斷使用。

#ifdef使用場景:

判斷某個宏是否被定義,若已定義,執行隨後的語句。

二、含義不同:

#ifndef表示ifnotdefine。

#ifdef表示ifdefine。

(5)c語言ifndef擴展閱讀:

#ifndef起到的效果是防止一個源文件兩次包含同一個頭文件,而不是防止兩個源文件包含同一個頭文件。

而編譯時,這兩個C文件要一同編譯成一個可運行文件。

把頭文件的內容都放在#ifndef和#endif中。不管頭文件會不會被多個文件引用,都要加上這個。

一般格式是這樣的:

#ifndef <標識>

#define <標識>.

...........

#endif<標識>

在理論上來說可以是自由命名的,但每個頭文件的這個「標識」都應該是唯一的。

標識的命名規則一般是頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:

#ifndef_STDIO_H_#define_STDIO_H_......#endif.

在#ifndef中定義變數出現的問題(一般不定義在#ifndef中)。

#ifndefAAA#defineAAA...inti;...#endif

❻ #ifndef的用法

文件中的#ifndef
頭件的中的#ifndef,這是一個很關鍵的東西。比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,於是問題來了,大量的聲明沖突。
還是把頭文件的內容都放在#ifndef和#endif中吧。不管你的頭文件會不會被多個文件引用,你都要加上這個。一般格式是這樣的:
#ifndef
<標識>
#define
<標識>
......
......
#endif
<標識>在理論上來說可以是自由命名的,但每個頭文件的這個「標識」都應該是唯一的。標識的命名規則一般是頭文件名全大寫,前後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h
#ifndef
_STDIO_H_
#define
_STDIO_H_
......
#endif
2.在#ifndef中定義變數出現的問題(一般不定義在#ifndef中)。
#ifndef
AAA
#define
AAA
...
int
i;
...
#endif
裡面有一個變數定義
在vc中鏈接時就出現了i重復定義的錯誤,而在c中成功編譯。
結論:
(1).當你第一個使用這個頭的.cpp文件生成.obj的時候,int
i
在裡面定義了當另外一個使用這個的.cpp再次[單獨]生成.obj的時候,int
i
又被定義然後兩個obj被另外一個.cpp也include
這個頭的,連接在一起,就會出現重復定義.
(2).把源程序文件擴展名改成.c後,VC按照C語言的語法對源程序進行編譯,而不是C++。在C語言中,若是遇到多個int
i,則自動認為其中一個是定義,其他的是聲明。
(3).C語言和C++語言連接結果不同,可能(猜測)時在進行編譯的時候,C++語言將全局
變數默認為強符號,所以連接出錯。C語言則依照是否初始化進行強弱的判斷的。(參考)
解決方法:
(1).把源程序文件擴展名改成.c。
(2).推薦解決方案:
.h中只聲明
extern
int
i;在.cpp中定義
<x.h>
#ifndef
__X_H__
#define
__X_H__
extern
int
i;
#endif
//__X_H__
<x.c>
int
i;
注意問題:
變數一般不要定義在.h文件中。

❼ c語言中的#ifndef,def,endif等宏是什麼意思

這些是條件編譯。
#ifdef 當後續宏被定義時,代碼段會被編譯。
#ifndef 當宏未定義時編譯。
#endif 條件編譯的結束標記。

熱點內容
阿里雲啟動伺服器 發布:2024-11-02 04:31:51 瀏覽:109
數控編譯錯誤802怎麼解決 發布:2024-11-02 04:31:42 瀏覽:319
linux如何安裝驅動 發布:2024-11-02 04:30:18 瀏覽:490
雲伺服器項目實施方案 發布:2024-11-02 04:26:00 瀏覽:245
寫入存儲 發布:2024-11-02 04:20:21 瀏覽:30
JavaString替換 發布:2024-11-02 04:14:29 瀏覽:559
百度查詢腳本 發布:2024-11-02 04:14:22 瀏覽:98
陰陽師ios如何登錄安卓 發布:2024-11-02 04:03:03 瀏覽:708
伺服器公網ip地址可以改嗎 發布:2024-11-02 04:01:32 瀏覽:960
大內網沒上傳 發布:2024-11-02 04:00:52 瀏覽:912