2

我是 C 新手,我正在维护某人的代码。我在头文件中遇到了这个。我可以理解,如果源代码是在 windows 上编译的,它将进入 if 语句,否则如果代码在 linux 上编译,它将进入 else 语句。如果我错了,请纠正我。

但是,问题是为什么在所有包含头文件前面都使用#(哈希)?

非常感谢您的任何建议,

#ifdef WIN32
#   include <conio.h>
#   include <process.h>
#   include <stdlib.h>
#   include <string.h>
#else
#   include <unistd.h>
#   include <termio.h>
#   include <sys/types.h>
#   include <sys/stat.h>
#   include <fcntl.h>
#endif
4

6 回答 6

8

哈希 (#) 表示预处理器指令。预处理器在编译之前运行代码,并根据所有以“#”开头的行执行操作。“#include filename.h”指令实质上复制了 filename.h 的所有内容并将其粘贴到“#include filename.h”行所在的位置。

于 2009-07-21T03:04:15.333 回答
7

#include是在 C 中包含文件的方式。

您可能会对 # 和 include 之间的空格感到困惑。

但它们并不重要。这些行仍然是#include。

于 2009-07-21T03:05:34.833 回答
3

因为“#include”是告诉预处理器包含标头的语法。英镑后面的空格只是为了格式化,并不是绝对必要的。

于 2009-07-21T03:04:05.133 回答
3

# 行实际上不是由 C 编译器本身处理,而是由作为编译管道早期阶段运行的预处理器处理。“#”是它如何知道它负责哪些行。

同样的预处理器也可以在其他上下文中使用。

预处理器不仅可以对表达式进行评估,如#ifand#ifdef子句,它还可以打开其他文件并使用子句插入它们#include,甚至可以使用#define子句进行文本替换。

更多信息可以在C 预处理器的Wikipedia 条目中找到。

#include不同于 VB.NetImports语句或 C#using语句。这些引用其他类,但#include实际上将包含文件的文本插入到源文件中的该位置。它可以递归地执行,因此包含的文件本身可能#include仍然是其他文件。

于 2009-07-21T03:04:35.740 回答
1

#include 指令告诉预处理器处理指定文件的内容,就好像这些内容已经出现在源程序中指令出现的位置一样。

http://msdn.microsoft.com/en-us/library/36k2cdd4(VS.80).aspx

于 2009-07-21T03:04:15.537 回答
1

include, ifdef, 等都是预处理指令,所以它们前面必须有井号(或哈希)字符。编写此代码的编码员只是将所有这些#字符排在左侧,以使代码看起来更清晰(在他看来)。

cplusplus.com 对预处理器指令有很好的概述

于 2009-07-21T03:05:05.257 回答