8. 停止编译报错
C 语言中 预处理指令 #error 主要用于在编译时强制生成一个错误信息,并立即终止编译。使用 #error 预处理指令可以尽早的在编译阶段发现错误,而不至于在运行阶段出现致命错误。
语法
#error [错误信息]
说明
- 错误信息通常为文字信息,用于描述错误原因。可以省略不写。
示例:
在程序中定义一个数组用于存储 100 ~ 10000 个学生的成绩,数组小于 100 不符合设计规范,数组大于 10000 则可能导致栈崩溃。结合上述需求我们编写代码如下:
// filename: error.c
#include <stdio.h>
#if MAX_STUDENT_COUNT < 100
#error MAX_STUDENT_COUNT is too small
#elif MAX_STUDENT_COUNT > 10000
#error MAX_STUDENT_COUNT is too large
#endif
int main(int argc, char * argv[]) {
int i;
int scores[MAX_STUDENT_COUNT];
int total_count = 0;
printf("数组的元素个数是: %d\n", MAX_STUDENT_COUNT);
for (i = 0; i < MAX_STUDENT_COUNT; i++) {
int scr = 0;
scanf("%d", &scr);
if (scr < 0) {
break;
}
scores[i] = scr;
}
total_count = i;
return 0;
}
编译运行结果如下:
weimingze@mzstudio:~$ gcc -D MAX_STUDENT_COUNT=1 -o error error.c
error.c:5:6: error: #error MAX_STUDENT_COUNT is too small
5 | #error MAX_STUDENT_COUNT is too small
| ^~~~~
weimingze@mzstudio:~$ gcc -D MAX_STUDENT_COUNT=9999999 -o error error.c
error.c:7:6: error: #error MAX_STUDENT_COUNT is too large
7 | #error MAX_STUDENT_COUNT is too large
| ^~~~~
weimingze@mzstudio:~$ gcc -D MAX_STUDENT_COUNT=1000 -o error error.c
weimingze@mzstudio:~$ ./error
数组的元素个数是: 1000
从上述运行结果可知,使用 gcc 的编译选项 -D MAX_STUDENT_COUNT=1 和 -D MAX_STUDENT_COUNT=9999999 都会在编译时报错,只用 MAX_STUDENT_COUNT 设定为合适的值,程序才能编译通过,程序才可以正常执行。
实验:
使用上述测试代码结合你编译器的预处理选项编译并执行上述程序。