用define定义的宏,最后需不需要加分号?
#define SIZE 10 #defineSIZE10;
都已经是 2025 年了,居然还有同学问这样的问题。
想要搞清楚要不要加分号,得搞清楚宏定义在C语言中处理方法。
编译程序的时候,一共分为四个步骤,预处理、编译、汇编、链接,我们说的宏定义,就发生在预处理阶段。
gcc -E test.c -o test.i gcc-Stest.i-otest.s gcc-ctest.s-otest.o gcc test.o -o test
预处理主要来处理'#'开头的代码,比如包含头文件、宏定义、条件编译等等。我们这里重点看下宏定义。
#include#defineSIZE 10 #ifndef #define SIZE 10 #endif
如果定义这样的宏:
#define SIZE 10 intarray[SIZE] = {0};
预处理后,SIZE 会被直接替换成 10:
int array[10] = {0};
如果定义这样的宏:
#defineSHOWprintf("helloworld ") int main() { SHOW; }
预处理后,SHOW 会被直接替换成 printf:
int main() { printf("helloworld "); }
如果加了分号,SIZE会被替换成 10 分号:
int array[10;] = {0};
很显然,这是个语法错误。
不过对于这样的函数,如果加了分号,替换后,也只是在语句后面多了一个分号:
int main() { printf("helloworld ");; }
在语法上没什么问题。
宏定义在C语言中并不算是一条语句,所以也不应该加上分号,大部分情况下,加了分号都会出问题。
-
C语言
+关注
关注
180文章
7608浏览量
137080 -
宏定义
+关注
关注
0文章
51浏览量
9035 -
define
+关注
关注
0文章
16浏览量
3757
原文标题:宏定义后面能不能加分号?
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论