程序的编译过程可以分为预处理、编译、汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器。
预处理过程读入源代码之后,会检查代码里包含的预处理指令,完成诸如包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码的工作。
通过预编译指令,只会把满足条件的代码编译进来,其他代码不参与编译
1, 指令
预编译指令以 #开头,整条语句构成一条预编译指令
2, 作用
C/C++ 语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。
3, 一些常用的预编译指令
#include
#define #undef
#define指令定义了一个标识符及一个串,标识符称为宏名,源程序中宏名的每次出现都会用其定义的串进行替换,称为宏替换。
#undef指令取消一个已定义的宏
#if #elif #else #endif(详解)
跨平台经常用到一下代码,这可以写到函数内部或外部
#if defined(WP8) ... #elif defined(ANDROID) ... #elif defined(IOS) ... #endif
这样根据不同的平台,编译器会选择不同的代码来编译,扔掉其他平台的代码。
那么 WP8 ANDROID IOS 这几个预定义宏是如何定义的呢
XCode 下预定义宏方法(只需要在这里面添加IOS 宏,这样编译运行或打包就只会编译IOS下面的代码 )
http://blog.csdn.net/tutuboke/article/details/44855777
eclipse android预定义宏的方法(这样只编译 条件编译指令 #elif defined(ANDROID) 下代码,编译的*.so文件不会包含其他平台的代码)
需要在编译so文件的 *.mk文件里面添加 android MK文件详解
LOCAL_CFLAGS +=-DANDROID 等价于在C/C++ 中得 #define ANDROID
VS wp8 设定预编译指令方法:(这样就只会编译 条件编译指令 WP8 下面的代码)
项目->属性->c/c++ ->预处理器->预处理器定义
#ifdef #ifndef #endif
#ifndef MYHEAD_H #define MYHEAD_H #include "myHead.h" #endif