如果在C中,指令总是错误的原因

如果在C中,指令总是错误的原因,c,C,以下是我在一个开源项目的代码中发现的内容: #if 0 static int print_cb(UNUSED void *ctx, void *i) { fprintf(stderr, "%i\n", *(int*)i); return 0; } #endif 你能解释一下为什么总是假的吗 谢谢。这是一种注释代码的方法。条件永远不会满足(0永远不会为true),因此预处理器将从编译中排除代码 它通常用于较大的代码块,这些代码块可能包含一些嵌入的多行注释/***/,无法通过将它们

以下是我在一个开源项目的代码中发现的内容:

#if 0
static int print_cb(UNUSED void *ctx, void *i)
{
    fprintf(stderr, "%i\n", *(int*)i);
    return 0;
}
#endif
你能解释一下为什么总是假的吗


谢谢。

这是一种注释代码的方法。条件永远不会满足(0永远不会为true),因此预处理器将从编译中排除代码


它通常用于较大的代码块,这些代码块可能包含一些嵌入的多行注释
/***/
,无法通过将它们包含在另一个多行注释中进行注释。

这只是使用预处理器注释(防止编译)较大代码块的一种方法。这很常见

这比使用实际的注释语法要好,因为它不会嵌套。如果您有:

int foo = 13; /* This won't be needed. */
您不能通过以下操作对其进行注释:

/*
int foo = 13; /* This won't be needed. */
*/

由于注释语法不嵌套,因此不会编译上述内容。使用
#if 0
方法可以绕过该限制。

这只是为了禁用此代码部分,如多行注释。避免嵌套注释是更好的方法。

来自

预处理器指令是包含在程序代码中的行,这些行不是程序语句,而是预处理器的指令。这些行的前面总是有一个散列符号(#)。预处理器在实际代码编译开始之前执行,因此预处理器在语句生成任何代码之前消化所有这些指令


因此,
#if 0
将被判定为
#if(false)
(失言),这意味着,不要进入块并跳过。注释某些内容的一种方式。

可能注释一段代码。这是某个平台中停用的代码。可以激活此代码以在主机中执行文件I/O操作。但是,在目标硬件中,这可能会被停用,因为某些目标不支持文件I/O,尤其是在低端微控制器的情况下。请查看另一个使用这种停用代码方式的好方法,即代码仍然会被源代码格式化程序等工具视为代码,如果使用
/**/
/
注释掉代码,可能会破坏格式。这被称为条件编译非常好的理由。良好的逻辑:)@artaxerxe读取并