“C语言中的宏常量”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
| (未显示同一用户的11个中间版本) | |||
| 第8行: | 第8行: | ||
# 枚举常量 | # 枚举常量 | ||
# 字符常量和字符串常量 | # 字符常量和字符串常量 | ||
| + | <syntaxhighlight lang="c"> | ||
| + | #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; | ||
| + | } | ||
| + | </syntaxhighlight>#define 只要一个作用,就是 '''<big>替换</big>'''。 | ||
| + | |||
| + | <nowiki>#</nowiki>include 是 '''<big>包含</big>'''。 | ||
| + | |||
| + | |||
| + | 宏常量在预编译时进行替换: | ||
| + | [[文件:宏常量在预编译时替换.png|无|缩略图|600x600像素]] | ||
| + | |||
| + | === 打开预处理到文件 === | ||
| + | {| class="wikitable" | ||
| + | |[[文件:VS打开预编译文件显示 1.png|左|缩略图|500x500像素|1]] | ||
| + | |[[文件:VS打开预编译文件显示 2.png|左|缩略图|500x500像素|2]] | ||
| + | |} | ||
| + | 然后“应用”“确定” | ||
| + | |||
| + | '''<big>注意:开启“预处理到文件”将取消编译,因此不会生成 .obj 文件,也就无法正常编译、链接、运行,之后要记得改回来。</big>''' | ||
| + | {| class="wikitable" | ||
| + | |[[文件:VS预处理文件.png|替代=|左|缩略图|3]] | ||
| + | |[[文件:VS预处理文件1.png|左|缩略图|500x500像素|4]] | ||
| + | |} | ||
| + | hello.i 这个预处理文件就出现了。 | ||
| + | |||
| + | 根据 VS 版本不同,可能需要“生成”》“重新生成解决方案”。 | ||
| + | 在 hello.i 中 “ctrl+l”找到 main 函数,能看到宏常量已经被替换:<syntaxhighlight lang="console"> | ||
| + | int main() | ||
| + | { | ||
| + | int a = 100; | ||
| + | float r = 10, s = 0; | ||
| + | s = r * r * 3.14; | ||
| + | printf("s = %f \n", s); | ||
| + | return 0; | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | 宏常量的声明后面不能加分号:<syntaxhighlight lang="c"> | ||
| + | #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; | ||
| + | } | ||
| + | </syntaxhighlight>像上面 “define PI 3.14;”这样写,生成的 hello.i 预编译文件中就是:<syntaxhighlight lang="console"> | ||
| + | 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; | ||
| + | } | ||
| + | </syntaxhighlight>就会编译报错。 | ||
| + | |||
| + | === 总结 === | ||
| + | '''<big>宏常量应用的是一种替换规则,在预编译时进行替换。</big>''' | ||
| + | |||
| + | ==== 宏常量的特点 ==== | ||
| + | 宏没有类型,也不会开辟空间,它只是在预编译时进行替换。定义宏常量时,一般的情况下不要给分号。 | ||
| + | |||
| + | <nowiki>#</nowiki>define 不光可以替换宏,还可以替换函数。 | ||
2022年10月29日 (六) 01:29的最新版本
https://www.bilibili.com/video/BV1vR4y1H7MY/?p=10
C语言的常量分为
- 字面常量
- 用 #define 定义的宏常量:可以用 #define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
- 用 const 关键字修饰的变量,称为常变量
- 枚举常量
- 字符常量和字符串常量
#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 是 包含。
宏常量在预编译时进行替换:
打开预处理到文件
然后“应用”“确定”
注意:开启“预处理到文件”将取消编译,因此不会生成 .obj 文件,也就无法正常编译、链接、运行,之后要记得改回来。
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 不光可以替换宏,还可以替换函数。