① VC中define定義的宏應該放在頭文件還是源文件
定義,為了便於使用可另外在頭文件中聲明。(理解定義和聲明的區別)
函數原型、數據結構、宏根據使用的范圍而定,只在一個cpp中使用,就在那個cpp中定義就可以了,否則放到一個公共的頭文件中。
類一般在頭文件中定義。
另外,虛機團上產品團購,超級便宜
② 頭文件中的 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來防止頭文件被重復引用
③ c語言中,頭文件define是什麼意思。
#開頭的都是預處理。define其實就是文本替換,同時可以有簡單的邏輯判斷。
1、普通情況
#define OK 1
#define rt return
代碼里所有的OK都會被替換成1,所有的rt都會被替換成return
2、帶括弧的情況
#define func(XX) print(XX)
代碼里的func會被替換成print 然後XX會對應。
④ 用 #define 定義的一組宏是不是適合放在頭文件中
在頭文件最上部加
#ifndef XXX
#define XXX
最下部寫
#endif
防止重復定義
⑤ 單片機c語言一個頭文件中包含許多隻有一個標識符的#define,為什麼
#define後面只跟一個標識符,表示這個標識符不代表任何值,就是一個空的標識符,常用於作為一個前綴標識,只是為了增加代碼的可讀性。這樣說你可能還不明白,其實這樣的用法在很多地方都會出現,比如MFC和Windows SDK頭文件中有一個修飾函數參數的#define定義,它的定義是這樣的:
#define IN
#define OUT
然後它的用法可能是這樣的:
void function(IN LPARAM lParam, OUT WPARAM outparam);
IN和OUT只是修飾,不代表任何東西,所起的只是一個說明作用,說明一個參數是一個輸入參數,而另一個是一個輸出參數,還能增加代碼的可讀性。
⑥ 頭文件中的ifndef/define/endif什麼用處
ifndef和endif是一對條件預編譯語句,給你一個例子:
ifndef abc;//意思是如果沒有定義abc這個特徵符,則編譯之後到endif之前的語句否則略過
//define abc;這條語句;
define abc;
endif;
比如有一段代碼,有時需要根據需要不進行編譯或進行編譯,如以下代碼:
ifdef abc;
某段代碼;
endif;
意思就是如果程序中定義了abc特徵符,則編譯這里所說的"某段代碼」,否則不進行編譯,
如果程序是這樣:
ifndef abc;
define abc;
endif;
ifdef abc;
某段代碼;
endif;
則這里所說的「某段代碼」肯定會被編譯,因為在設計程序之初,可能需要根據某個條件來決定是否編譯「某段代碼」,但是後來發現,這樣的條件編譯已經沒有必要,而且必須要編譯「某段代碼」,兩種辦法,一種是把ifdef abc和endif;去掉;另一種就像這里一樣,在
ifdef abc;
某段代碼;
endif;
之前加
ifndef abc;
define abc;
endif;