C语言中数据有常量和变量,其中定义常量主要有两种方法,这里主要学习#define定义常量的方法。
1.#define定义数字宏常量
例子如下:
1 2 3 4 5 6 7 8 9 10 |
|
以上例子通过#define定义了常量PI,其值为3.14。其值为float单浮点数,但是#define定义时没有声明基本数据类型,而是直接定义了一个常量字符来表示此数值。
#define没有显示的声明基本数据类型,因此在使用此方法定义常量时需要程序员清楚常量符号表示的数据是哪一种类型,否则会引起错误。
比如上面例子中PI是单浮点数,通过两种不同的数据类型进行打印,打印的结果如下:
$ ./define.exe
1374389535
3.140000
从结果看差异很大,因此在使用#define常量符号时,需要自判定数据的类型。
2.#define定义字符串宏常量
#define CITY "WuHan"
这是最简单的字符串宏常量,中间没有任何的转义字符或特殊字符。
#define PATH "E:\\c_study"
这是比较复杂的字符串宏常量,比如路径等,这里需要是双斜杠,否则会报如下错误:
$ gcc define.c -o define
define.c: 在函数‘main’中:
define.c:10:16: 警告:未知的转义序列:‘\c’
printf("%s\n",PATH);
^
即\需要配合转义字符使用。
例子代码如下:
#include<stdio.h> #define PI 3.14 #define CITY "WuHan" #define PATH "E:\\c_study" int main(void) { printf("%s\n",CITY); printf("%s\n",PATH); return 0; }
输出结果为:
$ ./define.exe
WuHan
E:\c_study
3.#define定义函数宏常量
函数宏常量涉及到函数换行,换行=\+回车
例子:
#include<stdio.h> #define dump(name){ printf(name); printf("\n"); printf(name); printf("\n"); } int main(void) { dump("test0"); dump("test1"); return 0; }
运行结果:
$ ./define
test0
test0
test1
test1
即#define定义时,换行不是以;判定,而是以"/+回车"判定
4.#undef 用来撤销宏常量的定义,撤销后不存在此宏常量
总结:
#define可以定义多种类型的宏常量,需要结合不同的场景使用,每一种场景需要注意对应的数据类型,转义字符和换行等关键地方。