用define定義的宏,最后需不需要加分號(hào)?
#define SIZE 10 #defineSIZE10;
都已經(jīng)是 2025 年了,居然還有同學(xué)問這樣的問題。
想要搞清楚要不要加分號(hào),得搞清楚宏定義在C語言中處理方法。
編譯程序的時(shí)候,一共分為四個(gè)步驟,預(yù)處理、編譯、匯編、鏈接,我們說的宏定義,就發(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ù)處理主要來處理'#'開頭的代碼,比如包含頭文件、宏定義、條件編譯等等。我們這里重點(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è)語法錯(cuò)誤。
不過對(duì)于這樣的函數(shù),如果加了分號(hào),替換后,也只是在語句后面多了一個(gè)分號(hào):
int main() { printf("helloworld ");; }
在語法上沒什么問題。
宏定義在C語言中并不算是一條語句,所以也不應(yīng)該加上分號(hào),大部分情況下,加了分號(hào)都會(huì)出問題。
-
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141826 -
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9233 -
define
+關(guān)注
關(guān)注
0文章
16瀏覽量
3938
原文標(biāo)題:宏定義后面能不能加分號(hào)?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
定時(shí)器回調(diào)函數(shù)能不能用ICACHE_FLASH_ATTR定義?
51單片機(jī)宏定義能不能只定義某幾個(gè)連續(xù)的IO口
電池能不能修復(fù)?
恒生電子總裁劉曙峰:一個(gè)特別重要的挑戰(zhàn)就是能不能跟得上這個(gè)變化
諧波治理到底能不能節(jié)電
拼接屏能不能觸屏操作?
直流電源到底能不能驅(qū)動(dòng)交流燈泡發(fā)光?

評(píng)論