一、pragma是什么?
pragma是一种预处理指令,在编译之前执行。
二、pragma怎么用?
基本语法是:
#pragma PARA(...)
其中PARA是命令参数,可以是以下值(仅列出常用命令):
alloc_text comment init_seg optimize
auto_inline component inline_depth pack
bss_seg data_seg inline_recursion pointers_to_members
check_stack function intrinsic setlocale
code_seg hdrstop message vtordisp
const_seg include_alias once warning
- message
编译的情况下发送字面字符串常量到标准输出。
#include<iostream>
//forC: #include<stdio.h>
#pragma message("hello world\n")
int main(){
std::cout<<"HELLO WORLD!!!";
//forC: printf("HELLO WORLD!!!");
return 0
}
你能够用字符串文字量和宏(但必须指示为字符串形式)的任何组合来构造(中间要有空格):
#define MAXN "114514"
#pragma message("MAXN:" MAXN)//合法
//输出:MAXN:114514
#pragma message("Hello" " " "World" "!" "\n")
//输出:Hello World!
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86 这个宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
2.once
once
参数在头文件(*.h)的开头使用,目的是防止该文件被包含(#include
)多次。
#pragma once
效果同#ifndef - #define - ... - #endif。
#ifndef _HEADER_H_
#define _HEADER_H_
...
#endif /* _HEADER_H_ */
3.hdrstop
hdrstop
(即HeaDeR STOP
),表示仅编译这前的头文件,后方不再编译。
4.warning
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示4507 和34 号警告信息
#pragma warning(once:4385) // 4385 号警告信息仅报告一次
#pragma warning(error:164) // 把164 号警告信息作为一个错误。
另外,pragma warning 也支持如下格式:
#pragma warning( push )保存所有警告信息的现有的警告状态。
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )//重新保存所有的警告信息(包括4705,4706 和4707)。
也可以用#pragma warning(default:4705)恢复4705的原来设置