gpt4 book ai didi

c - 如何在 makefile 构建中启用 "#ifndef/#endif" block ?

转载 作者:太空狗 更新时间:2023-10-29 15:49:09 24 4
gpt4 key购买 nike

我正在尝试在 MuPDF 中启用调试选项。出于某种原因,他们使用了 #ifndef NDEBUG#endif 使我想使用的代码变灰。我搜索了整个库,但找不到在任何地方定义的 NDEBUG 的任何痕迹。我已经设法通过在 header 中添加 #undef NDEBUG 来解决这个问题,但我想知道是否有更非侵入性的方法来这样做。

那么,您可以从 makefile 中启用“#ifndef/#endif” block 吗?

此外,为什么要使用 #ifndef 来使代码变灰?不应该是 #ifdef NDEBUG 吗?

最佳答案

您可以在 Makefile 中将 -DNDEBUG 添加到以下 3 个变量 - CFLAGSCPPFLAGSCXXFLAGS定义 NDEBUG。这相当于添加#define NDEBUG

还有其他变体:

-DNBDEBUG=1

相当于

#define NDEBUG 1

并且回答为什么有人会使用 #ifndef 而不是 #ifdef 的问题是因为它非常清楚地突出了您对原始代码的修改。

例如将以下代码视为原始版本:

int a = 123;
int b = 346;
int c = a + b;

并且您需要添加一个宏 DO_MULT 来代替乘法 - 有 2 种方法可以做到这一点。

第一个变体:

int a = 123;
int b = 346;
#ifdef DO_MULT
int c = a *b;
#else
int c = a + b;
#endif

第二种变化:

int a = 123;
int b = 346;
#ifndef DO_MULT
int c = a + b;
#else
int c = a *b;
#endif

如果您使用 difftools 查看更改 - 与第一个相比,第二个变体将更清楚地显示差异。

使用 #ifndef 的另一个原因是在 CATCH-ALL-EXCEPT 场景中做一些事情。

关于c - 如何在 makefile 构建中启用 "#ifndef/#endif" block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11568459/

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