24_#pragma的使用
1、#pragma简介
2、#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;
}
输出结果为:
编译的时候输出信息;
3、#pragma once用于保证头文件只被编译一次
"#pragma once"效率高,但不一定被编译器支持;
一般将程序写成如下所示:
#ifndef _HEADER_FILE_H_
#define _HEADER_FILE_H_
#pragma once
//source code
#endif
4、#pragma pack用于指定内存对齐方式
Test1和Test2所占内存为多少?
gcc默认条件下:"#pragma pack(4)"
Test1所占内存为12;Test2所占内存为8;
"#pragma pack()"的使用示例1:
#include <stdio.h>
#pragma pack(2)
struct Test1
{
char c1;
short s;
char c2;
int i;
};
#pragma pack()
#pragma pack(4)
struct Test2
{
char c1;
char c2;
short s;
int i;
};
#pragma pack()
int main()
{
printf("sizeof(Test1) = %d\n", sizeof(struct Test1));
printf("sizeof(Test2) = %d\n", sizeof(struct Test2));
return 0;
}
输出结果为:
"#pragma pack()"的使用示例2:
#include <stdio.h>
#pragma pack(8)
struct S1
{
short a;
long b;
};
struct S2
{
char c;
struct S1 d;
double e;
};
#pragma pack()
int main()
{
printf("%d\n", sizeof(struct S1));
printf("%d\n", sizeof(struct S2));
return 0;
}
输出结果为:
gcc编译器下:8 20
vs编译器下:8 24
原因:gcc编译器不支持8位对齐
文章内容为狄泰软件C语言课程学习笔记