首先我們要理解定義和宣告的區別,舉個常見的例子,比如有乙個common.c檔案中有這樣一句話
int var = 7;然後其對應的common.h檔案中有這樣一句:
int var;那麼上面一句叫做「定義」,下面一句叫「宣告」。
定義為變數分配了儲存空間,而宣告沒有。
宣告可有多處,而定義只能在一處.宣告不能做初始化.
下面是網友的話:
宣告是告訴編譯器「我存在!」。定義是告訴編譯器「我是幹什麼的!」。
就象你去圖書館
宣告:我們圖書館裡有這本書。
定義:書的內容
在ucos2作業系統原始碼中,出現了全域性巨集定義這個東西,雖然初學起來有點困難,一但掌握,寫起程式來會更靈活。
乙個龐大的程式會有不少的全域性變數存在,為了使**整潔,將全域性變數定義在了乙個檔案中,比如在common.c中。
#include "common.h"a和buf就是全域性變數。在common.h中對兩個變數進行了宣告,如下:int a = 10;
char buf[50] = "china";
#ifndef common_h_included然後我如果想在main.c檔案中使用他們,怎麼辦,可以直接用extern int a;宣告外部變數,就可以用。也可以#include#define common_h_included
#define os_common
int a;
char buf[50];
#endif // common_h_included
「commmon.h」 然後就可以直接用了。在沒有其他檔案的干預下兩種方法都可以,沒有任何問題。但是,如果工程很龐大,main.c包含了若干個(很多個)標頭檔案
你知道這些模組中有沒有包含過common.h呢。如果包含了,那麼再extern int a;就會出錯。#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"
QT全域性巨集定義
cmake在cmakelists.txt中新增巨集定義,編譯flags這些資訊 qmake則在pro檔案中定義巨集定義增加 defined use high version 這樣就把use high version定義為了全域性巨集定義 效果等同於cmake中 add definitions dus...
全域性變數及巨集定義
1 巨集名,全域性變數名建議大寫 2 號開頭的都是預處理指令,預處理是發生在預編譯階段 編譯階段之前 對源程式檔案進行一些簡單的文字替換 vc 中編譯按鈕整合了預編譯和編譯的 3 全域性變數的作用域就是從定義處開始,到整個檔案的末尾 include 巨集定義 define pi 3.141592 這...
abs int 巨集定義 巨集定義和巨集方法
巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...