gpt4 book ai didi

c - 为什么要使用#if 0 进行 block 注释?

转载 作者:太空狗 更新时间:2023-10-29 16:23:17 26 4
gpt4 key购买 nike

逆向工程代码,我对这种风格有点震惊,但我想确保做这些事情没有充分的理由....

这是我的问题还是这是一种糟糕的编码风格

if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name);
else sprintf(username,"%d",user_id);

为什么要将不打算编译的代码包装在

#if 0
....
#endif

而不是评论?


编辑:所以正如下面的一些解释,这是由于我没有意识到的 flummox/* */的可能性。

但我还是不明白,为什么不使用你的编程环境工具或最喜欢的文本编辑器的宏来阻止使用“//”将其注释掉

从视觉上跳过这不是更直接、更容易知道吗?


我是不是对 C 缺乏经验,不知道为什么这些东西可能是个好主意——或者没有任何借口,我有理由对这段代码的丑陋感到恼怒吗?

最佳答案

#if 0 在删除的 block 包含 block 注释时使用得非常频繁

我不会说这是一个好的做法,但我经常看到它。

单行流程控制+语句很容易理解,尽管我个人避免使用它(并且我工作过的大多数编码指南都禁止使用它)

顺便说一句,我可能会将标题编辑得有点有用“为什么使用#if 0 而不是 block 注释”

如果你有以下条件

#if 0
silly();
if(foo)
bar();
/* baz is a flumuxiation */
baz = fib+3;
#endif

如果您天真地将 #if 0/#endif 替换为 /* */,这将导致评论在之后立即结束flumuxiation,当您在上面的 #endif 位置点击 */ 时导致语法错误..

编辑:最后一点,#if 0 语法通常只在开发时使用,特别是当您必须支持多个版本或依赖项或硬件平台时。代码修改为

并不稀奇
#ifdef _COMPILED_WITHOUT_FEATURE_BAZ_
much_code();
#endif

使用集中式 header 定义(或不​​定义)数百个#define 常量。这不是世界上最漂亮的东西,但每次我在一个体面的项目上工作时,我们都会使用运行时开关、编译时常量 (this)、编译时编译决策(只是使用不同的 . cpp 取决于版本),以及偶尔的模板解决方案。这一切都取决于细节。

虽然您是开发人员,但首先只是让事情正常工作,但是...如果您不确定旧代码是否仍然有值(value),#if 0 是很常见的。

关于c - 为什么要使用#if 0 进行 block 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630601/

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