宏定义后面能不能加分号

描述

用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语言中并不算是一条语句,所以也不应该加上分号,大部分情况下,加了分号都会出问题。

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分