1. 程式人生 > >在C語言標頭檔案裡我們如何應用#ifndef

在C語言標頭檔案裡我們如何應用#ifndef

舉個例子 我在led.h 標頭檔案裡這麼寫
#ifndef __LED_H
#define __LED_H
.......
......
#endif

1 這樣寫是如何完成防止重複定義功能的
2 __LED_H 這個巨集定義我可以隨便命名嗎,還是這個#define後面的名字和 標頭檔案led.h 得名字村子某種命名約束
3 在應用標頭檔案中 ifdef 是如何公工作的
答案
  1.  編譯器讀到#ifndef __LED_H這一行時會檢查當前__LED_H這個字元是否已經被巨集定義了,如果是,則忽略其下文直到匹配的#endif;如果沒有被巨集定義,則繼續編譯其下文。這樣當這個標頭檔案第一次被#include時,編譯器發現_LED_H這個字元未被巨集定義,則編譯餘下的內容,第一句就將_LED_H這個字元巨集定義,則以後#include時,此標頭檔案就不會再被編譯了。

  2. __LED_H這個名字可以任意取(其用來編譯時區分是否是第一次被#include),但不能跟別的標頭檔案中的定義重複。

  3. !ifdef __LED_H 的意義跟上面的相同。ifdef表示如果定義了某巨集就編譯下文直到匹配的#endif,跟ifndef類似的條件編譯語句(邏輯正好相反)

ifdef這個巨集定義可以防止重複定義
但是如何完成的呢
1 我們在標頭檔案。h中寫了這句話,
#ifndef __LED_H
#define __LED_H
.......
......
#endif
如果有多個檔案引用了這個.h 檔案這多個檔案又包含在同一個檔案下。這樣我們的ifdef就起作用了。

相關推薦

C語言檔案我們如何應用#ifndef

舉個例子 我在led.h 標頭檔案裡這麼寫 #ifndef __LED_H #define __LED_H ....... ...... #endif 1 這樣寫是如何完成防止重複定義功能的 2 __LED_H 這個巨集定義我可以隨便命名嗎,還是這個#define後面的名

C語言檔案stdlib.h裡面有什麼函式

主要含有的內容方向: A.字串轉換 B. 隨機數 C.記憶體管理 D.與環境的介面 E.查詢與排序 F.整數運算 G.多位元組字元 … 友情連結: (1)關於 stdio.h 和 stdlib.h 包含的函式 https://blogG…csdn.net/weixin_42513339/

c語言檔案以及make注意事項

c語言標頭檔案以及make注意事項 標頭檔案說明:自己定義的標頭檔案和專案檔案放在一起,注意使用""而不是使用<>,系統的標頭檔案才使用<> 當main函式要呼叫其他函式的時候在編譯的時候需要將其他的c檔案也一起編譯 gcc main.c test.c   make

C語言檔案的定義

每個C++/C程式通常由標頭檔案(header files)和定義檔案(definition files)組成。標頭檔案作為一種包含功能函式、資料介面宣告的載體檔案,主要用於儲存程式的宣告(declaration),而定義檔案用於儲存程式的實現 (implementation)。 .c就是你寫的程式

C++ 檔案的:isalpha、islower、isupper、isalnum、isblank、isspace函式

1.isalpha isalpha()用來判斷一個字元是否為字母,如果是字元則返回非零,否則返回零。 cout << isalpha('a');//返回非零 cout << isalpha('2');//返回0 2.isalnum isal

linux中C語言檔案詳解

linux中C程式標頭檔案的種類 一類:#include<stdio.h> stdio.h檔案就在/usr/include目錄下 二類:#include<arpa/inet.h> arpa/是/usr/include目錄下的子目錄,inet.h其實是/usr/include

C語言檔案作用及寫法

標頭檔案幾個好處: 1,標頭檔案可以定義所用的函式列表,方便查閱你可以呼叫的函式; 2,標頭檔案可以定義很多巨集定義,就是一些全域性靜態變數的定義,在這樣的情況下,只要修改標頭檔案的內容,程式 就可以做相應的修改,不用親自跑到繁瑣的程式碼內去搜索。 3,標頭檔案只是宣告,不佔記憶體空間,要知道

C語言檔案正確寫法

目錄 一般寫法 自動生成 輸入 執行結果 參考連結 一般寫法 例如這樣有一根file.h標頭檔案,一般寫法如下 //file.h //條件編譯 #ifndef _FILE_H_ //如果沒有

MAC環境下 VS Code中C語言檔案匯入錯誤

今天重新拾起了C語言,下載了vs code和CLion, 然後發現vs code寫好程式碼之後標頭檔案下方出現波浪線表示錯誤,百思不得其解。 然後看網上解答,找到了答案,好像是因為需要路徑設定 #include errors detected. Please update your

C語言檔案詳解

1. GCC編譯時問題 在由多個C語言檔案組成的程式中,對於標頭檔案的管理非常重要。標頭檔案提供給使用者一個介面,使用者從中可以知道可以呼叫哪些函式,實現哪些功能,而不必去管這些功能的具體實現。因此,寫好標頭檔案是非常關鍵的。在標頭檔案中,最常見的問題是"標頭檔案的重複包含"。其意思是同一標頭

Linux C/C++語言檔案、庫檔案的查詢路徑

在程式設計中,檔案包含是很有用的。一個大的程式可以分為多個模組,由多個程式設計師分別程式設計。有        些公    用的符號常量或巨集定義等可單獨組成一個檔案,在其它檔案的開頭用包含命令包含該檔案即可使        用。這樣,可避免在每個檔案開頭都去書寫那些公

c語言檔案的作用以及寫法

標頭檔案幾個好處: 1,標頭檔案可以定義所用的函式列表,方便查閱你可以呼叫的函式; 2,標頭檔案可以定義很多巨集定義,就是一些全域性靜態變數的定義,在這樣的情況下,只要修改標頭檔案的內容,程式 就可以做相應的修改,不用親自跑到繁瑣的程式碼內去搜索。 3,標頭檔案只是

C語言檔案定義全域性變數問題

正確的作法是在c原始檔中定義一個全域性變數,在標頭檔案中加入全域性變數的宣告,在外部檔案呼叫的時候,包含其標頭檔案,加入全域性變數的宣告(不加也是可以的,最好加上)。 //1.c int a;

C語言檔案之float.h

float.h中的符號常量 float.h與limits.h一樣是定義邊界值的,float.h定義的是浮點數的邊界值 double DBL_DIG            double小數點後面精確的位數 DBL_EPSILON        小的正數,double的0跨

c語言檔案time.h

#include <stdio.h> #include <time.h> void main() { time_t sec; //typedef long time_t struct tm * curTime; sec = ti

C語言檔案包含和編寫的幾個基本規則

總想著把所有的標頭檔案都塞到一個頭檔案裡邊,然後,所有.c檔案只包含這一個混雜的標頭檔案就行了,也不用注意太多,, 但是這樣好像不行,摘抄一篇文章備份一下,覺得寫的不錯, 尊重原創,原文連結:http://blog.csdn.net/ison81/article/det

C語言檔案

標頭檔案結構  標頭檔案一般由3部分組成 1.標頭檔案的開頭版本和版權的宣告 2.預處理塊 3.函式和類結構的宣告  Question1:#include<a.h>和#include“a.h”有什麼區別?        #include<a.h>引用

c語言檔案大全

      標頭檔案 string.h       字串處理: 本分類的函式用於對字串進行合併、比較等操作       ----------------------------------------       字串拷貝 塊拷貝(目的和源儲存區不可重疊) memcpy       塊拷貝(目的和源儲存區可重

C語言檔案#include的作用是什麼?

unistd.h是用於linux/unix系統的呼叫。  #include <unistd.h>是POSIX標準定義的unix類系統定義符號常量的標頭檔案,包含了許多UNIX系統服務的函式

c++模板類的成員函式的宣告與定義應該放在檔案

    今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示