真题知识点
Pragma知识点
目录
- pragma简介
- pragma message
- pragma once
- pragma pack
- 小结
pragma简介
- #pragma用于指示编译器完成一些特定的动作
- #pragma所定义的很多指示字是编译器特有的
- #pragma在不同的编译器间是不可移植的
- 预处理器将忽略它不认识的#pragma指令
- 不同的编译器可能以不同的方式解释同一条#pragma指令
一般用法
#pragma parameter
pragma message
- message参数在大多数的编译器中都有相似的实现
- 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;
}
pragma once
- #pragma once用于保证头文件只被编译一次
- #pragma once是编译器相关的,不一定被支持
global.h
#pragma once
int g_value = 1;
test.c
#include <stdio.h>
#include "global.h"
#include "global.h"
int main(){
printf("g_value=%d\n",g_value);
return 0;
}
工程中既想要移植性,又想要保证效率,可以采取以下做法:
global.h
#ifndef _GLOBAL_H
#define _GLOBAL_H
#pragma once
int g_value = 1;
#endif