gpt4 book ai didi

c++ - 快速确定 C 预处理器分支的方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:43 25 4
gpt4 key购买 nike

当代码中包含大量#if、#ifdef 时。像下面的案例

#ifdef CASE1                       
#ifdef CASE1_1
#define VALUE X
#else
#define VALUE Y
#endif
#else
#define VALUE Z
#endif

有没有办法快速确定代码将被编译到哪个分支。任何建议表示赞赏。谢谢并致以最诚挚的问候

最佳答案

通过缩进可以更轻松地阅读嵌套的预处理器宏。大多数预处理器允许:


#ifdef foo
#define bar (1)
#endif

但是下面的形式应该是普遍允许的:


#ifdef foo
# define bar (1)
#endif

虽然这有助于遵循嵌套,但它不能保证您能够发现哪个路径是事件的,特别是当您通过 -D 将选项传递给编译器来进行定义时

一种解决方案是对源文件运行预处理器并检查输出。您可以通过手动运行预处理器可执行文件(例如 cpp),或者告诉编译器在运行预处理器后停止(例如 gcc -E)

保证向您展示哪些值已替换为您的预处理器宏。但是预处理器的输出可能很难理解。

如果您只是想跟踪一小段代码(如您的示例所示),您可以通过随意插入 #error(或 #warning如果您的预处理器支持它),并查看从编译器转储的错误。这通常是最简单的选项,因为您无需更改构建系统即可获得所需的可见性。

根据预处理器宏的复杂性,另一种选择是对源文件运行另一个预处理器工具,它会生成比预处理器更友好的输出。我在 filepp 上取得了成功过去。

关于c++ - 快速确定 C 预处理器分支的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com