[C++]学习pragma

一、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

  1. 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的原来设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1768317420

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值