学科分类
目录
C语言

#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代表编译中链接的库文件,所使用的库文件名放在双引号内。

点击此处
隐藏目录