深入了解#define以及关于#define语句后面加分号的问题

创作不易,感谢支持! ‾ \underline{创作不易,感谢支持! } 创作不易,感谢支持!

前言

想必学过C的朋友们一定会记得一个基本的define使用原则,那就是#define 语句后面是不需要分号的,但是果真如此吗?

#首先说一下define是什么?

宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。
无参宏定义的一般形式为:#define 宏名 字符串;带参宏定义的一般形式为:#define 宏名(参数表) 字符串。

注意:#define是 C语言 和 C++ 中的一个预处理指令,其中的“#”表示这是一条预处理命令·。凡是以“#”开头的均为预处理命令,#define的部分运行效果类似于word中的ctrl+F替换,与常量const相比有着无法替代的优势。

关于#define一些其他的用法,此文不会涉及,只说明最基本的用法。
说起define,最简单明了的用法,就是字符串的简单替换,提高代码的可读性,并且一次修改,多处生效。

  • define也可以定义标识符,宏以及代码等
1.#define定义标识符以及代码等等
示例:
#define MAX 100
#define STR "hehe"
#define reg register//和typedef相似
//define也可以定义代码
#define do_forever printf("hello");

运行时:
在这里插入图片描述

2.#define定义宏:

#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或者定义宏(define macro)

声明方式:
#define name(parament) stuff

注意:参数列表的左括号必须与name紧邻,如果两者之间有任何空白的存在,参数列表就会被解释为stuff的一部分

示例:

在这里插入图片描述


回归正题

#define后面可以加分号吗?

答案:可以的

  • 但是

我们最后的结果好像没什么问题,但实际上注意如果加上分号的话这个MAX本身的内容就是 100; 把这个MAX替换之后就变成了 100;; (两条语句)后面的语句就变成空语句了,这个时候可能就会出现问题了。

运行示例:
#define MAX1 100;
#define MAX2 100;

int main()
{
	int max1 = MAX1;
	int max2 = MAX2;
	//实际上编译器在运行时会把它翻译成以下形式
	//int max1= 100;
	//int max2 = 100;;
	printf("max1= %d\n", max1);
	printf("max2= %d\n", max2);
	return 0;
}

运行结果:
max1= 100
max2= 100

  • 如果我们直接运行打印define定义的标识符时,此时就会出现报错
示例:
  • 编译器会把MAX翻译成 100;
    在这里插入图片描述
    相信看到这里,也就明白了到底#define后面定义要不要加分号了!

以上代码均在vs2022环境下编译

  • 35
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨辰JC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值