C語言中的標頭檔案中的巨集定義
常見內容
原始檔的頭部一般都會有#include
指令來包含標頭檔案,標頭檔案的內容一般就是
- #define語句
- extern宣告
- 函式原型宣告
#include
和#define
都是C的預處理指令,#include
就是把檔案中的所有內容貼上到原始檔中,僅此而已!
(一般)格式
標頭檔案的編寫一般遵循如下格式
#ifndef _MYLIB_H_
#define _MYLIB_H_
/*檔案的內容放在這裡,如*/
int a;
typedef struct _node{
int value;
struct _node *next;
}Node;
#define PI 3.14
#endif
這樣寫的目的是為了防止重複匯入,因為前處理器在處理ifndef
指令的時候,如果_MYLIB_H_
被定義過了,就會直接跳轉到#endif
處,中間的內容在真正編譯的時候不會被包括進去。_MYLIB_H_
可以改成任何名字,不過最好按照規範:所有字母大寫,.改成_。
剛開始我一直以為_MYLIB_H_
被定義為下面的所有語句,然後就很納悶,這個define怎麼和巨集定義的define不太一樣,其實在這裡_MYLIB_H_
就是被定義成了一個空的東西,有定義但是什麼值都沒有。然後如果又被引入一次,前處理器就會跳到#endif
去,使得標頭檔案的內容不被重複包含(雖然應該是被重複貼上了)
一些規範
儘管條件包含可以避免包含多個同一檔案,使用者就不必考慮標頭檔案之間的依賴關係,但是不同原始檔的連結是在最後一步進行的,而預處理是在第一步進行的,所以如果標頭檔案中有變數的定義而且被多個檔案包含,在連結的時候就會報重複定義的錯誤,所以,一個好的規範就是:
標頭檔案中不要有函式或者變數的定義!
相關文章
- c 語言中巨集定義和定義全域性變數的區別變數
- pch檔案的使用, 標頭檔案使用, 常量(const)的定義,以及一些常用的巨集定義
- C語言(巨集定義)C語言
- C語言巨集定義中#define中的井號#的使用C語言
- iOS開發:pch檔案中的巨集定義iOS
- C語言中的檔案流C語言
- c/c++標準預定義巨集C++
- iOS標頭檔案中如何在巨集裡引用已有的巨集iOS
- C語言標頭檔案#include的作用C語言
- C++中巨集定義#define的用法C++
- C 語言專案中標頭檔案包含的最佳實踐
- 避免標頭檔案重複定義
- C語言 - 標頭檔案包含C語言
- mac CLion cmake 呼叫自己定義的標頭檔案Mac
- C語言標頭檔案的使用(轉載)C語言
- C語言關於標頭檔案的使用C語言
- 巨集_變數_函式_指標_標頭檔案變數函式指標
- C 語言的標頭檔案是必須的嗎
- C 語言標頭檔案作用的簡單理解
- 有關C語言的知識---巨集定義用法C語言
- c++中模板類的成員函式的宣告與定義應該放在標頭檔案裡C++函式
- C 標頭檔案
- 為什麼不在標頭檔案做定義
- C 語言的變數作用域及標頭檔案變數
- C語言標頭檔案#include的作用是什麼?C語言
- C 語言巨集定義 #define 的理解與資料整理
- C語言巨集定義##連線符和#符的使用C語言
- C/C++語言巨集定義##連線符和符#的使用C++
- C語言中宏定義都有那些盲區?C語言
- 關於C++的標頭檔案C++
- C 標頭檔案 作用
- C++巨集定義#defineC++
- C++ 中神奇的標頭檔案,懶人專用C++
- C系列語言中.c&&.h檔案內容的區分
- C語言的本質(19)——預處理之一:巨集定義C語言
- 編寫安全程式碼:不要在標頭檔案中定義變數變數
- C語言標頭檔案到底是什麼?C語言
- vscode 自定義c++標頭檔案,編譯過程中遇到的問題VSCodeC++編譯