今天看到了乙個非常毀三觀的陣列定義
testarray.c
#include
char arr[12]=
;void output(char *str)
int main()
wsk.h
// this is wsk.h
[5] = '*',
[11] = '*',
wtf!!!在陣列定義中居然包含了乙個標頭檔案!!!這還了得?我們編譯一下看看會報什麼錯….
我勒個去,這貨居然編過了,這是為什麼呢?我們來看一下#include預編譯巨集的作用。
上述**在編譯器進行預編譯的時候,遇到 #include 「wsk.h」 ,則會把整個 wsk.h 檔案都copy到 testarray.c 中,注意,不一定非要在檔案最開頭,也可以是在檔案中間的位置,因此,在實際編譯 testarray.c 之前,testarray.c 已經被修改為了如下形式:
testarray.c 預編譯後的臨時檔案
#include //抱歉,此處不展開了
char arr[12]=
;void output(char *str)
int main()
深入理解include預編譯原理
1.include 命令的作用 1.1 什麼情況不使用 include 檔案 void test a 檔案 void test a 函式宣告 void test b 其實,這樣的工程,可以不用使用 include 預編譯命令。1.2 什麼情況使用 include 如果工程裡面的函式特別多,那麼按照上...
深入理解include預編譯原理
1.include 命令的作用 1.1 什麼情況不使用 include 檔案 void test a 檔案 void test a 函式宣告 void test b 其實,這樣的工程,可以不用使用 include 預編譯命令。1.2 什麼情況使用 include 如果工程裡面的函式特別多,那麼按照上...
深入理解include預編譯原理
1.include 命令的作用 1.1 什麼情況不使用 include 檔案 void test a 檔案 void test a 函式宣告 void test b 其實,這樣的工程,可以不用使用 include 預編譯命令。1.2 什麼情況使用 include 如果工程裡面的函式特別多,那麼按照上...