用define定義的宏,最后需不需要加分號(hào)?
#define SIZE 10 #defineSIZE10;
都已經(jīng)是 2025 年了,居然還有同學(xué)問(wèn)這樣的問(wèn)題。
想要搞清楚要不要加分號(hào),得搞清楚宏定義在C語(yǔ)言中處理方法。
編譯程序的時(shí)候,一共分為四個(gè)步驟,預(yù)處理、編譯、匯編、鏈接,我們說(shuō)的宏定義,就發(fā)生在預(yù)處理階段。
gcc -E test.c -o test.i gcc-Stest.i-otest.s gcc-ctest.s-otest.o gcc test.o -o test
預(yù)處理主要來(lái)處理'#'開頭的代碼,比如包含頭文件、宏定義、條件編譯等等。我們這里重點(diǎn)看下宏定義。
#include#defineSIZE 10 #ifndef #define SIZE 10 #endif
如果定義這樣的宏:
#define SIZE 10 intarray[SIZE] = {0};
預(yù)處理后,SIZE 會(huì)被直接替換成 10:
int array[10] = {0};
如果定義這樣的宏:
#defineSHOWprintf("helloworld ") int main() { SHOW; }
預(yù)處理后,SHOW 會(huì)被直接替換成 printf:
int main() { printf("helloworld "); }
如果加了分號(hào),SIZE會(huì)被替換成 10 分號(hào):
int array[10;] = {0};
很顯然,這是個(gè)語(yǔ)法錯(cuò)誤。
不過(guò)對(duì)于這樣的函數(shù),如果加了分號(hào),替換后,也只是在語(yǔ)句后面多了一個(gè)分號(hào):
int main() { printf("helloworld ");; }
在語(yǔ)法上沒(méi)什么問(wèn)題。
宏定義在C語(yǔ)言中并不算是一條語(yǔ)句,所以也不應(yīng)該加上分號(hào),大部分情況下,加了分號(hào)都會(huì)出問(wèn)題。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7608瀏覽量
137113 -
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9037 -
define
+關(guān)注
關(guān)注
0文章
16瀏覽量
3757
原文標(biāo)題:宏定義后面能不能加分號(hào)?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論