1 條件include
如下
code
#ifndef main_h_
#define main_h_
其它內容
#endif
上面在看到標頭檔案時會看到 作用就是阻止這個標頭檔案被多次include
多次include就會出現重複的定義情況 所以需要在每個標頭檔案中都使用這個定義
如果還不是很了解要怎樣使用 可以看看 c的標準標頭檔案 如fcntl.h
2 條件編譯
如下
code
#ifdef _debug
printf("this debug info\n");
#endif
如果沒有定義_debug巨集的話 那麼上面那一行是不會編譯進去的
但是定義了_debug後 上面那行就會編譯進去 可以寫個簡單的程式測試
code
#include
int main()
第一次使用 gcc -d_debug main.c
第二次使用 gcc main.c
執行兩次的結果看
3 定義為某個值 以便後面修改這個值時不用修改其它地方** 只要修改這個巨集的定義就可以了
如乙個軟體的多語言版本等
如下
code
#include
#define print_str "你好 dd"
main()
編譯時 會把print_str代替成"你好 dd"
以後想修改時就方便了
另外也可以定義為函式
#include
#ifdef _debug
#define a(x) a(x)
#else
#define a(x) b(x)
#endif
int a(int x)
int b(int x)
int main()
[/code]
其實也可以定義成
#define a a
的但是 定義成a(x)後 只有a後面帶乙個(x)型別的 編譯器才會執行替換 比較安全 可以保證只替換函式而不替換變數
第四個可變引數巨集
有些時候定義乙個巨集來代替某個函式 但是這個函式是可變引數的話 那就需要考慮辦法了
定義方法如下
code
#define print(...) printf(__va_args__)
#include
int main()
第五個 巨集組合
也就是## 和 #的用法
## 是連線符號 連線兩個巨集
#是把名字代替成字串
如下code
#define s5(a) supper_ ## a
#include
void supper_printf(const char* p )
int main()
#用法如下
#include
#define s(p) #p
int main()
執行一下就知道了
bufferedReader進一步理解
public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...
進一步理解委託
前面一篇文章介紹了委託的基本知識,接下來就進一步研究一下委託。其實,剛開始覺得委託型別是乙個比較難理解的概念,怎麼也不覺得下面的 assembleiphonehandler 是乙個型別。public delegate void assembleiphonehandler 按照正常的情況,如果我們要建...
前端進一步理解
非常開心能夠在這裡作工作匯報和個人總結,這是我鼓起勇氣的結果,算是成功了一半,呵呵。從剛來公司茫然失措的菜蛋到現在稍顯成熟的菜鳥,我知道我離成功又進了一步。以下是我對前端的理解和對自己這段時間的總結 一 前端職責 前端開發是由網頁製作演變而來的,它的主要職能就是把 的介面更好地呈現給使用者,主要包括...