Code :: Blocks不解析标题#define

时间:2017-11-15 13:33:30

标签: c ide codeblocks

Code :: Blocks有一个令人惊讶的缺点 - 它的编辑器无法正确解析多个源文件以正确地突出显示#ifdef / #ifndef样式代码路径。它仅适用于直接在其中定义宏但不在任何其他相关项目文件中定义宏的文件。例如:

MyHeader.h

#define MRAA__

MyProgram.c

#include "MyHeader.h"
#ifndef MRAA__
#define FOO() Foo_Bcm2835()
#else 
#define FOO() Foo_Mraa()
#endif

尽管您已在头文件中定义了MRAA__,但#ifndef MRAA__的评估结果为true。现在编译器处理这个很好,但在编辑器中可视化它是错误的。

是的,你可以完全关闭灰色处理,但它有一个非常方便的功能...是否真的没有插件/补丁来修复这个功能?我可以在2012年找到人们抱怨它。

Editor showing inactive code incorrectly

2 个答案:

答案 0 :(得分:0)

这篇文章不仅仅是一个答案,只是一个澄清。 包含图像以突出显示在中讨论的问题 原帖,希望引起Code :: Blocks的注意 开发人员 existing bug registered at least 5 years ago - and similar

截至今天,我不知道有任何补丁或修复或修订来解决此问题......

下面的图片是在Code :: Blocks版本13.12中捕获的 C项目,说明 OP语法突出显示问题。 (注意: OP版本甚至更新:16.01)

虽然Code :: Blocks(和GCC)只能正确执行“true” #ifdef(或#ifndef)指令的分支,语法高亮是值得钦佩的 在任何文件中定义的符号,而不是正在使用的文件。

例如,MRAA__在此.c文件以外的文件中定义, 当它在这里使用时,#ifdef的“true”分支显示为灰色。 但是对于在此文件中定义的ABCD__,“false”分支是灰色的。

enter image description here

答案 1 :(得分:0)

请您在这里遇到任何问题,对于遇到类似问题的任何人,请考虑您在代码块中使用的编译器。它可以在某处拯救生命