“C语言中的宏常量”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的1个中间版本)
第35行: 第35行:
 
|}
 
|}
 
然后“应用”“确定”
 
然后“应用”“确定”
 +
 +
'''<big>注意:开启“预处理到文件”将取消编译,因此不会生成 .obj 文件,也就无法正常编译、链接、运行,之后要记得改回来。</big>'''
 
{| class="wikitable"
 
{| class="wikitable"
 
|[[文件:VS预处理文件.png|替代=|左|缩略图|3]]
 
|[[文件:VS预处理文件.png|替代=|左|缩略图|3]]
第64行: 第66行:
 
float r = 10, s = 0;
 
float r = 10, s = 0;
 
s = r * r * PI;
 
s = r * r * PI;
 +
s = PI * r * r;
 
printf("s = %f \n", s);
 
printf("s = %f \n", s);
 
return 0;
 
return 0;
第73行: 第76行:
 
float r = 10, s = 0;
 
float r = 10, s = 0;
 
s = r * r * 3.14;;
 
s = r * r * 3.14;;
 +
s = 3.14; * r * r;
 
printf("s = %f \n", s);
 
printf("s = %f \n", s);
 
return 0;
 
return 0;
第80行: 第84行:
 
=== 总结 ===
 
=== 总结 ===
 
'''<big>宏常量应用的是一种替换规则,在预编译时进行替换。</big>'''
 
'''<big>宏常量应用的是一种替换规则,在预编译时进行替换。</big>'''
 +
 +
==== 宏常量的特点 ====
 +
宏没有类型,也不会开辟空间,它只是在预编译时进行替换。定义宏常量时,一般的情况下不要给分号。
 +
 +
<nowiki>#</nowiki>define 不光可以替换宏,还可以替换函数。

2022年10月29日 (六) 01:29的最新版本

https://www.bilibili.com/video/BV1vR4y1H7MY/?p=10

C语言的常量分为

  1. 字面常量
  2. 用 #define 定义的宏常量:可以用 #define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
  3. 用 const 关键字修饰的变量,称为常变量
  4. 枚举常量
  5. 字符常量和字符串常量
#include<stdio.h>
#define LEN 100
#define PI 3.14

int main()
{
	int a = LEN;
	float r = 10, s = 0;
	s = r * r * PI;
	printf("s = %f \n", s);
	return 0;
}

#define 只要一个作用,就是 替换

#include 是 包含


宏常量在预编译时进行替换:

宏常量在预编译时替换.png

打开预处理到文件

1
2

然后“应用”“确定”

注意:开启“预处理到文件”将取消编译,因此不会生成 .obj 文件,也就无法正常编译、链接、运行,之后要记得改回来。

3
4

hello.i 这个预处理文件就出现了。

根据 VS 版本不同,可能需要“生成”》“重新生成解决方案”。

在 hello.i 中 “ctrl+l”找到 main 函数,能看到宏常量已经被替换:

int main()
{
	int a = 100;
	float r = 10, s = 0;
	s = r * r * 3.14;
	printf("s = %f \n", s);
	return 0;
}


宏常量的声明后面不能加分号:

#include<stdio.h>
#define LEN 100
#define PI 3.14;

int main()
{
	int a = LEN;
	float r = 10, s = 0;
	s = r * r * PI;
	s = PI * r * r;
	printf("s = %f \n", s);
	return 0;
}

像上面 “define PI 3.14;”这样写,生成的 hello.i 预编译文件中就是:

int main()
{
	int a = 100;
	float r = 10, s = 0;
	s = r * r * 3.14;;
	s = 3.14; * r * r;
	printf("s = %f \n", s);
	return 0;
}

就会编译报错。

总结

宏常量应用的是一种替换规则,在预编译时进行替换。

宏常量的特点

宏没有类型,也不会开辟空间,它只是在预编译时进行替换。定义宏常量时,一般的情况下不要给分号。

#define 不光可以替换宏,还可以替换函数。