2

这是我在一个开源项目的代码中发现的:

#if 0
static int print_cb(UNUSED void *ctx, void *i)
{
    fprintf(stderr, "%i\n", *(int*)i);
    return 0;
}
#endif

你能解释一下这总是假的原因是什么吗?

谢谢。

4

4 回答 4

10

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

它比使用实际的注释语法要好,因为它没有嵌套。如果你有:

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

您不能通过以下方式将其注释掉:

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

由于注释语法没有嵌套,所以上面的代码不会编译。使用该#if 0方法可以绕过该限制。

于 2013-10-21T12:49:28.467 回答
7

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

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

于 2013-10-21T12:49:13.490 回答
4

That is just to disable this code section like Multiline comment. It is better method which avoids nested comments.

于 2013-10-21T12:49:56.123 回答
1

这里的预处理器定义

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

所以,#if 0会被决定为#if (false)(懒洋洋的说),也就是说,不进块跳过。注释掉某事的一种方式。

于 2013-10-21T12:56:28.113 回答