这是我在一个开源项目的代码中发现的:
#if 0
static int print_cb(UNUSED void *ctx, void *i)
{
fprintf(stderr, "%i\n", *(int*)i);
return 0;
}
#endif
你能解释一下这总是假的原因是什么吗?
谢谢。
这是我在一个开源项目的代码中发现的:
#if 0
static int print_cb(UNUSED void *ctx, void *i)
{
fprintf(stderr, "%i\n", *(int*)i);
return 0;
}
#endif
你能解释一下这总是假的原因是什么吗?
谢谢。
这只是一种使用预处理器注释掉(防止编译)一大块代码的方法。这很常见。
它比使用实际的注释语法要好,因为它没有嵌套。如果你有:
int foo = 13; /* This won't be needed. */
您不能通过以下方式将其注释掉:
/*
int foo = 13; /* This won't be needed. */
*/
由于注释语法没有嵌套,所以上面的代码不会编译。使用该#if 0
方法可以绕过该限制。
这是一种注释代码的方式。永远不会满足条件(0 永远不会为真),因此预处理器将从编译中排除代码。
它通常用于较大的代码块,这些代码块可能包含一些嵌入的多行注释/* */
,这些注释不能通过将它们包含在另一个多行注释中来注释掉。
That is just to disable this code section like Multiline comment. It is better method which avoids nested comments.
预处理器指令是包含在我们程序代码中的行,它们不是程序语句,而是预处理器的指令。这些行前面总是有一个井号 (#)。预处理器在代码的实际编译开始之前执行,因此预处理器在语句生成任何代码之前消化所有这些指令。
所以,#if 0
会被决定为#if (false)
(懒洋洋的说),也就是说,不进块跳过。注释掉某事的一种方式。