标签:turn pil version 很多 source stdio.h 程序 成员 否则
注:不同的parameter参数语法和意义各不相同
与#error和#warning不同,#pragma 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;
}
这两种方式有什么区别?
通过宏可以保证头文件里的内容只被嵌入一次但可能包含了多次,预处理
器依然处理了多次,所以从效率上说它要打折扣,而pragam once 告诉
预处理器当前文件只被编译一次(即只被include一次,多余的都不会处理),所以它的编译效率会高很多,然而大多数工程使用#ifndef方式,原因在于不是所有的编译器都支持once这个参数,#ifndef是C语言所支持的
例子1:#pragma once使用分析
global.h
#pragma once
int g_value = 1;
main.c
#include<stdio.h>
#include"global.h"
#include"global.h"
int main()
{
printf("g_value = %d\n",g_value);
return 0;
}
在有的编译器上支持,有的不支持
实际工作中往往使用如下的方式保证移植性和高效性
#ifndef _GLOBAL_
#define _GLOBAL_
#pragma once
int g_var = 1;
#endif
12/8
#pragma pack用于指定内存对齐方式
#pragma pack能够改变编译器的默认对齐方式
标签:turn pil version 很多 source stdio.h 程序 成员 否则
原文地址:https://www.cnblogs.com/yanyun888/p/9213145.html