c - cat.c 中 #if 0 的用途

标签 c c-preprocessor freebsd cat

首先,我知道what exactly does an if 0 endif block do? .

但我正在寻找 FreeBSD 的 cat.c另一个问题中的解释没有解释此文件中的 #if 0 。注释掉的 block 太小了,以至于有人无法轻松删除它们,但他/她选择将它们包装在 #if 0 ... #endif 中。为什么有人会做出这样的选择而不是简单地删除这段代码?如果它以某种方式用作元数据,为什么不将其放在评论中?

最佳答案

在这种情况下,它会在源代码中保留最初派生源的代码版本的历史记录(因此,即使您无权访问版本控制系统,您也可以看到此信息)信息),同时不向编译器提供正确的信息。

#if 0
#ifndef lint
static char const copyright[] =
"@(#) Copyright (c) 1989, 1993\n\
    The Regents of the University of California.  All rights reserved.\n";
#endif /* not lint */
#endif

曾几何时,这些信息会被编译到二进制文件中。现代编译器消除了像这样未使用的变量。

关于c - cat.c 中 #if 0 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315562/

相关文章:

c - 尝试通过 bash 脚本中的命令行传递预处理器指令

c - 指针变量如何工作,而不在 Turbo C++ 代码中初始化它?

c - 将指针的二维数组传递给函数 C 的不同方法

c - 如何理解tiny c函数的汇编结果?

linux - 我正在寻找一个在 FreeBSD 上托管 Web 服务的应用程序

C++ 不同线程在 FreeBSD 10 上具有相同的线程 ID

c++ - FreeBSD 上的 R feather 包编译错误(g++)

C 宏 : Function factories, 为什么宏只在一种情况下不起作用?

c++ - 我们可以有递归宏吗?

cmake - #cmakedefine 预处理器指令是什么?