常量就是在程序中不能改变其值的量
使用一对单引号(’’)引起来的一个字符,就表示这是一个字符型常量
一堆双引号("")括起来的内容,就是一个字符串常量
在程序中直接使用的常数,也就是一个字面量常量,这样的数称为幻数.例如
#include <stdio.h> int main(void) { double area = 3.14 * 2 * 2; printf("%d\n", area); return 0; } 上面例子中的3.14等常数就称为幻数使用一个标识符号来标识的常量
定义了一个宏之后,我们就可以在源代码中使用宏名来代替其标识的字符串
在预编译的时候,预编译处理程序会将源程序中所有使用了宏名的地方展开和替换为其代表的字符。例如
#include <stdio.h> #define PI 3.14 int main(void) { double area = PI * 2 * 2; printf("%d\n", area); return 0; }预编译处理之后,展开为
#include <stdio.h> #define PI 3.14 int main(void) { double area = 3.14 * 2 * 2; printf("%d\n", area); return 0; }所以我们在宏定义的时候,末尾一般不要写;号,因为这并不是一条c语句
宏替换实际上就是一个完完全全的纯文本替换,在进行预编译处理的时候,将宏名替换为它所 代表的字符串。如果我们像下面这样写
#define PI 3.14; ... double area = PI * 2 * 2;那替换后就变成了
#define PI 3.14; ... double area = 3.14; * 2 * 2;这样就会导致产生编译错误
我们知道,双引号("")之间包含的内容是一个字符串常量,因此,对于字符串常量中出现的宏名,是不会进行宏展开和宏替换的。例如
#define PI 3.14 ... printf("PI = %f\n", PI); 那么字符串常量中的PI是不会被进行宏展开和宏替换的。其宏替换结果为 #define PI 3.14 ... printf("PI = %f\n", 3.14);const常量具有数据类型,编译器能够对其类型进行检查