与#error和#warning不同, #pragma message仅仅代表一条编译信息,不代表程序错误。
示例代码:#pragma message使用示例
#include <stdio.h> #define ANDROID23 #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; }输出结果 ctest.c:8: note: #pragma message: Compile Android SDK 2.3…
注:一般我们不使用这种方式,而是使用一下方式:
#ifndef _HEADER_FILE_H #define _HEADER_FILE_H //source code #endif不同类型的数据在内存中按照一定的规则排列 而不一定是顺序的一个接一个的排列。
例如:以下Test1和Test2所占的内存空间是否相同?
实际上我们通过代码测试,Test1和Test2所占的内存空间是不相同的。那么它们在内存的分布是怎么样的呢?
问题:那么sizeof(struct Test1) = ?; sizeof(struct Test2) = ?
示例代码:结构体大小计算
#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; }输出结果: sizeof(Test1) = 10 sizeof(Test2) = 8
编译器在默认情况下按照4字节对齐。