用define定义的宏,最后需不需要加分号?
#define SIZE 10 #define SIZE 10;
都已经是 2025 年了,居然还有同学问这样的问题。
想要搞清楚要不要加分号,得搞清楚宏定义在C语言中处理方法。
编译程序的时候,一共分为四个步骤,预处理、编译、汇编、链接,我们说的宏定义,就发生在预处理阶段。
gcc -E test.c -o test.i gcc -S test.i -o test.s gcc -c test.s -o test.o gcc test.o -o test
预处理主要来处理'#'开头的代码,比如包含头文件、宏定义、条件编译等等。我们这里重点看下宏定义。
#include#define SIZE 10 #ifndef #define SIZE 10 #endif
如果定义这样的宏:
#define SIZE 10 int array[SIZE] = {0};
预处理后,SIZE 会被直接替换成 10:
int array[10] = {0};
如果定义这样的宏:
#define SHOW printf("helloworld ") int main() { SHOW; }
预处理后,SHOW 会被直接替换成 printf:
int main() { printf("helloworld "); }
如果加了分号,SIZE会被替换成 10 分号:
int array[10;] = {0};
很显然,这是个语法错误。
不过对于这样的函数,如果加了分号,替换后,也只是在语句后面多了一个分号:
int main() { printf("helloworld ");; }
在语法上没什么问题。
宏定义在C语言中并不算是一条语句,所以也不应该加上分号,大部分情况下,加了分号都会出问题。
全部0条评论
快来发表一下你的评论吧 !