0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

宏定义后面能不能加分号

学益得智能硬件 来源:学益得智能硬件 2025-01-06 16:35 次阅读

用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

原文标题:宏定义后面能不能加分号?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 1309次阅读
    C语言中结构体<b class='flag-5'>能不能</b>相加

    定时器回调函数能不能用ICACHE_FLASH_ATTR定义

    非 OS SDK 在中断处理函数中,请勿使用任何 ICACHE_FLASH_ATTR 定义的函数。 请问: 1、定时器和hw定时器的回调函数是否在中断处理函数里面被调用。定时器回调函数能不能调用
    发表于 07-22 06:33

    51单片机定义能不能定义某几个连续的IO口

    51单片机定义能不能定义某几个连续的IO口,比如P1的0~3为t1,P1的4~7为t2,要能单独控制,不能直接
    发表于 04-08 14:15

    这个电路图能不能给我解释下后面llc是如何工作的

    这个电路图能不能给我解释下后面llc是如何工作的最好能再解释下全图是如何工作的 大恩不言谢!
    发表于 05-06 16:09

    while循环后面大括号可以加分号

    While(1){};?? 后面可以加分号
    发表于 03-24 01:49

    电池能不能修复?

    电池能不能修复? 电池修复作为一个新生事物,许多人对它不了解,也有许多人对它一知半解。那么电池到底能不能修复呢?
    发表于 11-23 10:40 1100次阅读

    光耦(TLP521-4)能不能转换电压?

    光耦(TLP521-4)能不能转换电压?
    发表于 05-31 11:15 4300次阅读

    恒生电子总裁刘曙峰:一个特别重要的挑战就是能不能跟得上这个变化

    “金融科技行业的最大风险就是跟不上变化。新技术来了,技术变革了,你能不能跟得上?你能不能跟得上业务的变化?”
    的头像 发表于 08-26 17:27 4148次阅读

    新能源的车到底能不能买_新能源汽车的利与弊

     那么新能源汽车到底能不能买?内行人说出实情,后悔没有早知道
    的头像 发表于 07-30 09:59 3987次阅读

    谐波治理到底能不能节电

    谐波治理到底能不能节电?”这是我们做电能质量行业经常会被问到的一个问题。随着国家对节能减排项目的大力支持,有不少商业人士一拥而上加入到节能行业,想要分得节能市场的一杯羹。那么,通过谐波治理到底能不能实现节能的效果呢?
    发表于 04-23 15:50 3604次阅读

    大型辊压机轴磨损能不能现场维修?

    大型辊压机轴磨损能不能现场维修?
    发表于 06-23 15:35 1次下载

    指针能不能作为循环变量?

    指针能不能作为循环变量?
    的头像 发表于 02-16 18:11 1052次阅读

    物联网流量卡到底能不能用?

    物联网流量卡到底能不能用?
    的头像 发表于 08-28 09:40 6380次阅读
    物联网流量卡到底<b class='flag-5'>能不能</b>用?

    拼接屏能不能触屏操作?

    拼接屏能不能直接触屏操作,小编回答可以的,实际上很多客户购买拼接屏时都会提出拼接屏能不能加触摸的功能?我们回复是可以的,那是一种怎样的原理呢? 拼接屏一般是用来大屏展示,用来播放文字、图像等内容
    的头像 发表于 09-11 14:36 5493次阅读

    直流电源到底能不能驱动交流灯泡发光?

    我在网上经常看到有网友在问直流电源到底能不能驱动交流灯泡发光?事实胜于雄辩,这次专门准备了一盒干电池,来实际演示一下,看看能不能发光。
    的头像 发表于 11-13 15:07 3742次阅读
    直流电源到底<b class='flag-5'>能不能</b>驱动交流灯泡发光?