`

转 一个用于在编译阶段发现错误的技巧

    博客分类:
  • C
 
阅读更多
在剖析epoll源代码的时候,发现了一个很有用的宏,该宏的目的主要是解决一些条件满足,一旦无法满足这些条件,将会在编译阶段提示错误,而不是到运行阶段出现crash。
宏定义如下:
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))  //如果条件*满足就直接char[-1],此时将会出现编译错误。

宏的使用:
BUILD_BUG_ON(EPOLL_CLOEXEC != O_CLOEXEC);

转帖:http://blog.csdn.net/tenfyguo/article/details/12151629
分享到:
评论

相关推荐

    matlab 7.x 界面设计与编译技巧 源代码

    例如,`figure`函数创建一个新的窗口,`uicontrol`函数创建各种用户界面控件,而`uiimport`则用于导入数据到界面中。 在编译技巧方面,MATLAB Compiler可以将MATLAB代码转换为独立的可执行文件或组件,使得非MATLAB...

    中缀表达式转后辍 编译原理

    中缀转后缀的核心算法通常采用逆波兰转换法,主要包括两个数据结构:一个栈和一个输出队列。在遍历中缀表达式的每个字符时,如果遇到操作数,直接将其放入输出队列;如果遇到运算符,则根据运算符的优先级与栈顶...

    商业编程-源码-编译与调试技巧源代码 TranslateWindowStyle_Demo.zip

    "TranslateWindowStyle_Demo"可能是一个演示如何在Windows环境下利用特定API(如TranslateMessage和DispatchMessage)进行窗口消息处理的例子,也可能涉及调试这些API的使用情况。掌握调试技巧,如理解异常处理,...

    编译原理实验及源代码

    实验的主要目标是设计并实现一个词法分析程序,用于分析C语言的一个子集。这个子集包括特定的关键字、专用符号以及ID和NUM等其他标记。关键词包括"main"、"if"、"else"、"int"、"char"、"for"、"while",全部为小写...

    编译原理_编译原理_编译_

    编译原理是计算机科学中的一个重要领域,它研究如何将高级编程语言转换为机器可以理解的低级语言,即机器码。编译器是这一过程的关键工具,它将源代码(程序员编写的高级语言)转化为目标代码(计算机可以直接执行的...

    WINCE6.0 PB 编译技巧

    在Windows CE 6.0 (WINCE6.0)操作系统开发中,Platform Builder (PB) 是一个关键工具,用于构建定制化的嵌入式系统。针对标题和描述中提到的编译技巧,以下是一些详细说明: 1. **PB编译流程**: PB的编译过程包括...

    c++条件编译详解

    - **功能**:在`#if`之后使用,用于测试另一个条件表达式。只有当之前的`#if`或`#elif`的条件未满足时,才会检查此表达式。 4. **`#endif` 指令** - **功能**:标记条件编译块的结束。 5. **`#error` 指令** ...

    商业编程-源码-编译与调试技巧源代码 DbgOut.zip

    3. **DbgOut**:这个名字可能指的是一个自定义的调试输出函数或者类,用于在程序运行时打印调试信息。通常,这样的工具会提供更丰富的日志级别(如错误、警告、信息、调试)和格式化输出功能,帮助开发者更好地理解...

    DSP编程技巧之:编译指示

    在C代码中,它允许指定一个符号和一个新的段名,而在C++代码中,它允许指定一个新段名。这使得开发者可以将特定的函数或代码块放置在用户定义的代码段中,以更好地控制内存布局。 5. DATA_SECTION 指令 DATA_...

    windows编译完整ffplay工程

    FFmpeg是一个开源项目,包含了多个用于处理音视频的工具,如ffmpeg、ffplay、ffprobe等。其中,ffplay是一个简单的播放器,基于SDL库,能够播放多种格式的音视频文件。在Windows环境下编译完整的FFmpeg工程,尤其是...

    linux编译说明.txt

    - **编译阶段**:将预处理后的源代码转换成汇编代码。 - **汇编阶段**:将编译生成的汇编代码转换成目标文件。 - **链接阶段**:将多个目标文件链接成一个可执行文件或者库文件。 ### 实战案例分析:gcctest.c-...

    编译原理试题与答案

    编译原理是计算机科学中的一个重要领域,主要研究如何将高级编程语言转换为机器可以理解的低级语言,如机器码或汇编语言。这门学科涉及语法分析、语义分析、错误处理、优化等多个方面,对于软件开发和计算机系统的...

    C++元编程,实现任意进制之间的相互转换,包含编译期数组的翻转,打印操作

    通过这种方式,我们可以在代码编译阶段就得到翻转后的数组,从而提高了效率。 至于编译期的打印操作,C++标准库并没有提供编译期的打印功能,因为这是运行时的行为。然而,通过模板元编程和类型安全的打印工具,如`...

    编译原理第一周实验作业参考答案

    在Bracket.java中,重点可能在于实现一个能够正确识别和处理括号匹配的解析器。这可能涉及到栈数据结构的应用,通过压入和弹出操作来跟踪和检查括号的匹配。学生需要理解和应用基本的编程技巧,如循环和条件判断,...

    C#实现的编译器,编译原理的课程设计

    在这个项目中,C#编译器可能包含了一个自顶向下或自底向上的解析算法,用于构建抽象语法树(AST),这棵树状结构直观地表示了源代码的结构和语义。 在C#编译程序中,除了词法分析和语法分析外,还有其他关键组件。...

    北邮编译原理课程设计

    通过这个课程设计,学生不仅能够掌握编译器的基本工作原理,还能了解软件工程中的一个重要环节,提升自己的编程能力与问题解决技巧。同时,这也是对理论知识的实践运用,有助于加深对编译原理的理解。在完成课程设计...

    编译课设\编译原理课设报告

    - **预测分析表构造**:基于文法的非终结符号的FIRST和FOLLOW集合,构造预测分析表,用于指导解析器如何处理输入串中的每一个符号。 - **栈的使用**:预测分析程序常使用栈来存储解析过程中遇到的符号,以便于回溯...

    C语言编程 实例常见编译错误

    在C语言编程中,开发者经常会遇到各种编译错误,这些错误是编程过程中的常见障碍,但也是提升编程技能的关键步骤。下面将详细讲解C语言的原理、屏幕界面程序设计、内存驻留程序设计以及应用技巧,并针对常见的编译...

    编译原理PL/0编译程序语法分析

    在这个阶段,词法分析器生成的单词流被转化为抽象语法树(AST),这是一个树形结构,直观地表示了程序的语法结构。 3. **语义分析**: 在`pl0_ininterpret.c`或`pl0_gen.c`中,语义分析器会检查语法树的节点,确保...

    编译原理作业答案

    在本主题中,“编译原理作业答案”是一个与计算机科学中的编译原理课程相关的资源集合。这通常涉及一系列由学生完成或教师提供的解答,用于帮助理解编译器设计的基础概念和理论。王刚老师作为提供这些答案的人,可能...

Global site tag (gtag.js) - Google Analytics