#pragma相关操作

#pragma用于指示编译器完成一些特定的动作
#pragma所定义的很多指示字是编译器特有的
#pragma在不同的编译器间是不可移植的
_预处理器将忽略它不认识的#pragma指令
_不同的编译器可能以不同的方式解释同一条#pragma指令

一般用法

#pragma parameter
meaage参数在大多数的编译器中都有相似的实现
message参数在编译时输出消息到编译输出窗口中
message用于条件编译中可提示代码的版本信息

使用示例:

#include<stdio.h>
#if defined(ANDROID20)
	#pragma message("Compile Android SDK 2.0...")
	#define VERSION "Android 2.0"
#elif defined(ANDROID23)
	 #pragma message("Compile Android SDK 2.3...")
	 #define VERSION "Android 2.3"
#elif defined(ANDROID40)
	 #pragma message("Compile Android SDK 4.0...")
  	 #define VERSION "Android 4.0"
#else
	#error Compile Version is not provided!
#endif

int main()
{
	printf("%s\n",VERSION);
	return 0;
}

在GCC编译器下输入指令:

gcc -DANDROID40 test.c

此时输出:

test.c:9:note: #pragma message:Compile Android SDK 4.0...

继续输入指令:

./a.out

输出:

Android 4.0

#pragma once
#pragma once用于保证头文件只被编译一次
#pragma once是编译器相关的,不一定被支持

对比:#ifndef #define #endif 和 #pragma once
前者效率低,后者高,但是不一定所有编译器都能用,所以经常可以在其他代码中只能看到前者,后者很少见到
示例代码:

//global.h
#pragma once
int g_value = 1;

//main.c
#include<stdio.h>
#include"global.h"
#include"global.h"
int main()
{
	printf("%d\n",g_value);
	return 0;
}

gcc编译器中输出结果为1
而bcc等其他编译器报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值