条件预编译
Ⅰ 编译和预编译有什么区别。
预编译又称为预处理,是做些代码文本的替换工作。
处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等
就是为编译做的预备工作的阶段
主要处理#开始的预编译指令
编译(compilation , compile) 1、利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
Ⅱ 如何实现条件编译
插入预编译宏命令,例如:
// 宏 条件
#ifdef __APPLE__
// 这里编译 苹果 的
#else
// 这里编译 其它 的
#endif
Ⅲ 什么条件下使用条件预编译
使用这个东西的话,只要你想使用这个东西就可以使用了,这个的话倒是没有什么特别的限制的
Ⅳ 什么是预编译,何时需要预编译
预编译又称为预处理,是做些代码文本的替换工作
预编译又称为预处理,是做些代码文本的替换工作
处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等
就是为编译做的预备工作的阶段
主要处理#开始的预编译指令
预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。常见的预编译指令有:
(1)#include 指令
该指令指示编译器将xxx.xxx文件的全部内容插入此处。若用<>括起文件则在系统的INCLUDE目录中寻找文件,若用" "括起文件则在当前目录中寻找文件。一般来说,该文件是后缀名为"h"或"cpp"的头文件。
注意:<>不会在当前目录下搜索头文件,如果我们不用<>而用""把头文件名扩起,其意义为在先在当前目录下搜索头文件,再在系统默认目录下搜索。
(2)#define指令
该指令有三种用法:
第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#if配合使用;
第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,原因见注1);
第三种是定义"函数",如#define get_max(a, b) ((a)>(b)?(a):(b)) 则以后使用get_max(x,y)就可以得到x和y中较大的数(这种方法存在一些弊病,见注2)。
第四种是定义"宏函数",如#define GEN_FUN(type) type max_##type(type a,type b){return a>b?a:b;} ,使用时,用GEN_FUN(int),则此处预编译后就变成了 max_int(int a,int b){return a>b?a:b;},以后就可以使用max_int(x,y)就可以得到x和y中较大的数.比第三种,增加了类型的说明。
(3)#if、#else和#endif指令
这些指令一般这样配合使用:
#if defined(标识) //如果定义了标识
要执行的指令
#else
要执行的指令
#endif
在头文件中为了避免重复调用(比如说两个头文件互相包含对方),常采用这样的结构:
#if !(defined XXX) //XXX为一个在你的程序中唯一的标识符,
//每个头文件的标识符都不应相同。
//起标识符的常见方法是若头文件名为"abc.h"
//则标识为"abc_h"
#define XXX
真正的内容,如函数声明之类
#endif
Ⅳ 预处理命令的条件编译
有些语句希望在条件满足时才编译。
格式:(1)
#ifdef 标识符
程序段1
#else
程序段2
#endif
或
#ifdef
程序段1
#endif
当标识符已经定义时,程序段1才参加编译。
格式:(2)
#ifndef 标识符
#define 标识1
程序段1
#endif
如果标识符没有被定义,则重定义标识1,且执行程序段1。
格式:(3)
#if 表达式1
程序段1
#elif 表达式2
程序段2
……
#elif 表达式n
程序段n
#else
程序段n+1
#endif
当表达式1成立时,编译程序段1,当不成立时,编译程序段2。
使用条件编译可以使目标程序变小,运行时间变短。
预编译使问题或算法的解决方案增多,有助于我们选择合适的解决方案。
此外,还有布局控制:#pragma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。
Ⅵ C语言预编译,条件编译问题
不可以。条件编译的条件必须是在程序运行之前就知道值的,这样才能把你的代码根据情况编译为不同的程序。这里的函数参数在运行前不知道值,因此无法使用条件编译。
Ⅶ C++中的条件编译是怎么一回事能举例解释一下吗
意思是在预编译的时候 如果发现NNX没有被define 那么就执行#ifndef NNX 和#else 之间的内容
#define NNX //定义NNX
xxxxxxxxx
xxxxxxxx
如果NNX被define了就执行#else和#endif之间的内容
xxxxxx
xxxxx
//注:#ifndef 可以翻译成if not define
它和#ifdef相反 if define
Ⅷ C语言:预编译是什么
预编译,顾名思义,从字面上看,就是提前编译,它做的是工作就是为正式编译做准备
它说处理的是有#标识的代码,如讲include的文件进行拷贝、#define的条件编译等等!关于预编译的介绍你可以到网络里进行查看,里面有详细的介绍!http://ke..com/view/176610.htm
Ⅸ 如何在Makefile中定义宏进行条件编译
你可以借助BASHSHELL强大的字符串处理能力来实现啊!
比如你可以将你想定义的“宏”放在makefile.include中,然后将其赋值,而在makefile中加入include makefile.include一行,在其后需要进行条件预编译时进行字符串比较来实现啊!