我想要的不是标准的C预处理器,而是可以从某个地方接受的变体 - 可能是命令行通过-DNAME1和-UNAME2选项 - 定义了哪些宏的规范,然后消除了死码.
通过一些例子可能更容易理解我所追求的内容:
#ifdef NAME1
#define ALBUQUERQUE "ambidextrous"
#else
#define PHANTASMAGORIA "ghostly"
#endif
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-DNAME1'运行的,则输出将为:
#define ALBUQUERQUE "ambidextrous"
Run Code Online (Sandbox Code Playgroud)
如果命令是使用'-UNAME1'运行的,则输出将为:
#define PHANTASMAGORIA "ghostly"
Run Code Online (Sandbox Code Playgroud)
如果命令是在没有选项的情况下运行的,则输出将与输入相同.
这是一个简单的例子 - 我希望代码也可以处理更复杂的情况.
用现实世界但仍然简单的例子来说明:
#ifdef USE_VOID
#ifdef PLATFORM1
#define VOID void
#else
#undef VOID
typedef void VOID;
#endif /* PLATFORM1 */
typedef void * VOIDPTR;
#else
typedef mint VOID;
typedef char * VOIDPTR;
#endif /* USE_VOID */
Run Code Online (Sandbox Code Playgroud)
我想运行命令-DUSE_VOID -UPLATFORM1并获取输出:
#undef VOID
typedef void VOID;
typedef void * VOIDPTR;
Run Code Online (Sandbox Code Playgroud)
另一个例子:
#ifndef DOUBLEPAD
#if …Run Code Online (Sandbox Code Playgroud) 我花了很多时间来浏览和编辑复杂的科学C代码.通常它们包含使用预处理器指令打开和关闭的数百个可选功能.这使得几乎不可能一目了然地说明当前设置中是否激活了当前代码块.代码本身并没有帮助,因为每个特征都在整个地方被污染,而且一切都通常使用全局变量来完成.
是否有一个IDE可以通过折叠/着色非活动代码来处理预处理器指令?
我想,可以使用已使用标志的配置维护一个项目,并且不受非活动逻辑分支的困扰.
我将 Eclipse CDT 用于带有自定义 makefile 的 C 项目,并且我想使用问题739230的答案中建议的非活动代码突出显示。活动/定义符号的自动发现对我的 makefile 不起作用。相反,我为列出活动符号的每个构建目标创建了一个文本文件。
所以我的问题是:
直接编辑 .cproject 文件并添加如下行:
<listOptionValue builtIn="false" value="HIRES_OUTPUT"/>
Run Code Online (Sandbox Code Playgroud)
但前提是我通过 GUI 为每个构建目标创建第一个密钥。我更愿意在一次操作中创建构建目标并导入符号。
从头开始编写 Eclipse 插件对于这项任务来说似乎有点过分。
有没有更聪明的方法来做到这一点?