#pragma
#pragma预处理的作用是设定编译器的状态或者指示编译器完成特殊的功能,其格式如下:
#pragma parameter
上述格式中,parameter是编译器特有的字段,常见的用法有以下几种:
1、#pragma once
#pragma once通常用于多文件编程中,将“#pragma once”放到头文件第一行,保证当前的头文件仅仅被编译一次。
在前面章节中编译出现重定义错误,这是由于头文件foo.h被重复包含,在头文件foo.h第一行添加#pragma once,会确保当前头文件仅仅被编译一次,解决类型重定义的错误。
2、#pragma warning
参数warning表示对编译警告的处理,详细参数如下所示。
#pragma warning(disable:4244) //不显示4244号警告信息
#pragma warning(once: 6031) //6031号警告信息仅报告一次
#pragma warning(error: 4013) //把4013号警告信息作为一个错误。
Visual Studio2019的编译器对C语言中的一些不安全的库函数会提出警告,下面通过一个案例来演示,如例1所示。
例1 warning.c
1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdio.h>
3 int main()
4 {
5 int a;
6 scanf("%d", &a);
7 return 0;
8 }
例1运行结果如图1所示。
图1 例1运行结果
程序运行结果中出现警告,并提示错误码“C6031”,在warning.c文件第一行添加#pragma warning(disable:C6031)后,再次编译可以取消警告。
3、#pragma message
参数message用于使编译器在编译过程中输出相应的信息,比如在编译过程中显示是否执行定义的条件编译,如例2所示。
例2 message.c
1 #include<stdio.h>
2 #ifdef DEBUG
3 #pragma message("测试版编译中")
4 #else
5 #pragma message("正式版编译中")
6 #endif
7 int main()
8 {
9 return 0;
10 }
在Visual Studio2019菜单栏单击【生成】→【重新生成解决方案】,编译结果如图2所示。
图2 例2编译结果
4、#pragma comment
参数comment选项通常用于链接库文件,其语法格式如下。
#pragma comment(lib, "库名称")
其中,参数lib代表编译中链接的库文件,所使用的库文件名放在双引号内。