美文网首页
14. 条件编译

14. 条件编译

作者: bigwhite | 来源:发表于2013-11-26 15:34 被阅读0次

条件编译在处理机器依赖、调试以及编译阶段设定特定选项时十分有用。不过要小心条件编译。各种控制很容易以一种无法预料的方式结合在一起。如果使用#ifdef判断机器依赖,请确保当没有机器类型适配时,返回一个错误,而不是使用默认机器类型(使用#error并缩进一级,这样它可以一些老旧的编译器下工作)。如果你#ifdef优化选项,默认情况下应该是一个未经优化的代码,而不是一个不兼容的程序。确保测试的是未经优化的代码。

注意在#ifdef区域内的文本可能会被编译器扫描(处理),即使#ifdef求值的结果为假。但即使文件的#ifdef部分永远不能被编译到(例如,#ifdef COMMENT),这部分也不该随意的放置文本。

尽可能地将#ifdefs放在头文件中,而不是源文件中。使用#ifdef定义可以在源码中统一使用的宏。例如,一个用于检查内存分配的头文件可能这样实现:(省略了REALLOC和FREE):

#ifdef DEBUG
    extern void *mm_malloc();
#    define MALLOC(size) (mm_malloc(size))
#else
    extern void *malloc();
#    define MALLOC(size) (malloc(size))
#endif

条件编译通常应该基于一个接一个的特性的。多数情况下,都应该避免使用机器或操作系统依赖。

#ifdef BSD4
    long t = time ((long *)NULL);
#endif

上面代码之所以糟糕有两个原因:很可能在某个4BSD系统上有更好的选择,并且也可能存在在某个非4BSD系统中上述代码是最佳代码。我们可以通过定义诸如TIME_LONG和TIME_STRUCTD等宏作为替代,并且在诸如config.h的配置文件中定义一个合适的宏。

相关文章

  • 14. 条件编译

    条件编译在处理机器依赖、调试以及编译阶段设定特定选项时十分有用。不过要小心条件编译。各种控制很容易以一种无法预料的...

  • 条件编译

    与 if 语句区别: 条件编译在编译之前执行,符合条件的才会被编译执行 if 语句在编译的时候都会被编译,但是只要...

  • 条件编译

    在 C 系语言中,可以使用 #if 或者 #ifdef 之类的编译条件分支来控制哪些代码需要编译,而哪些代码不需要...

  • 条件编译

    // C 系语言中,可以是用 #if 或者 #ifdef 之类的编译条件分支来控制那些代码需要编。/*#if#el...

  • 条件编译

    实际中遇到了问题, 查询后发现此处使用条件编译 即可通过定义USE_HORIZONTAL 的值来执行条件选择 条件...

  • 条件编译

    条件编译和选则结构if的共同点 都可以对给定的条件进行判断, 添加满足或者不满足都可以执行特定的代码条件编译和选则...

  • 编译和预处理指令

    1.预处理指令分类: 2.条件编译目的:防止文件重复包含和编译 条件编译当然也可以用条件语句来实现。 但是用条件语...

  • 22_条件编译使用分析

    关键词:条件编译的本质、#include的本质、 条件编译的意义 0 基本概念: 1) 条件编译的行为类似于C语言...

  • V语言学习笔记-25条件编译

    条件编译 目前主要针对不同平台,实现条件编译 按照作者的说法,为了保持V的简单,不会加入预处理,但是支持条件编译 ...

  • 嵌入式day13

    条件编译 编译器根据条件真假决定是否编译相关的代码 常见的条件编译有两种方法 根据宏是否定义 根据宏的值 结构体 ...

网友评论

      本文标题:14. 条件编译

      本文链接:https://www.haomeiwen.com/subject/poiqtttx.html