C语言学习【常量和C预处理器】
符号常量(symbolic constant)
C预处理器可以用来定义常量 就像这样
#define TAXRATE 0.015
/* 通用格式 末尾不加分号 */
/* 大写表示符号常量是 C 语言一贯的传统 */
#define NAME value
编译程序时,程序中所有TAXRATE
都会被替换成0.015
,这一过程称为编译时替换(compile-time substitution)
,这样定义的常量也称为明示常量(manifest constant)
另外,还有一个不常用的命名约定,即在名称前带 c_或 k_前缀来表示常量(如,c_level 或 k_line).
/* 在披萨饼程序中使用已定义的常量 */
#include "stdio.h"
#define PI 3.1415926
int main(void)
{
float area, circum, radius;
printf("What is the radius of your pizza?\n");
scanf("%f", &radius);
area = PI * radius * radius;
circum = 2.0 * PI * radius;
printf("Your basic pizza parameters are as follows:\n");
printf("circumference = %1.2f, area = %.2f\n", circum, area);
}
程序运行结果
What is the radius of your pizza?
6
Your basic pizza parameters are as follows:
circumference = 37.70, area = 113.10
printf()
语句中的%1.2f
表明,结果被四舍五入为两位小数输出
#define
指令还可以定义字符和字符串常量,前者使用单引号,后者使用双引号,例如:
#define BEEP '\a' /* 哔哔响 */
#define TEE 'T'
#define ESC '\033'
#define OOPS "Now you have done it!"
const限定符
C90
标准新增const
关键字,用于限定一个变量为只读,其声明如下
const int NOMTHS = 12; /* MONTHS在程序中不可得更改 */
明示常量
C头文件limits.h
和float.h
分别提供了与整数类型和浮点类型大小限制相关的相信信息,例如
#define INT_MAX +32767
#define INT_MIN -32768
/* 代表int类型的最大值和最小值 */
/* int整型变量范围 */
#include "stdio.h"
#include "limits.h"
int main(void)
{
printf("Maximum int value on this system = %d\n", INT_MAX);
}
程序运行结果
Maximum int value on this system = 2147483647
以下为limits.h
中的一些明示常量
类似的,float.h
头文件中也定义了一些明示常量,如FLT_DIG
和DBL_DIG
分别表示float
类型和double
类型的有效数字位数
示例程序
/* 使用limits.h和float头文件中定义的明示常量 */
#include "stdio.h"
#include <limits.h>
#include "float.h"
int main(void)
{
printf("Some number limits for this system:\n");
printf("Biggest int: %d\n", INT_MAX);
printf("Smallest long long: %lld\n", LLONG_MIN);
printf("One byte = %d bits on this system.\n", CHAR_BIT);
printf("Largest double: %e\n", DBL_MAX);
printf("Smallest normal float: %e\n", FLT_MAX);
printf("float precision = %d digits\n", FLT_DIG);
printf("float epsilon = %e\n", FLT_EPSILON);
return 0;
}
该程序输出示例如下
Some number limits for this system:
Biggest int: 2147483647
Smallest long long: -9223372036854775808
One byte = 8 bits on this system.
Largest double: 1.797693e+308
Smallest normal float: 3.402823e+038
float precision = 6 digits
float epsilon = 1.192093e-007