C #ifdef#else#endif宏问题

C #ifdef#else#endif宏问题,c,code-formatting,C,Code Formatting,我是C语言的新手,我正在维护别人的代码。我在头文件中发现了这个。我可以理解,如果源代码在windows上编译,它将输入if语句,否则如果代码在linux上编译,它将输入else语句。如果我错了,请纠正我 但是,问题是为什么在所有include头前面使用#(hash) 非常感谢您的建议 #ifdef WIN32 # include <conio.h> # include <process.h> # include <stdlib.h> # inc

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

但是,问题是为什么在所有include头前面使用#(hash)

非常感谢您的建议

#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
#ifdef WIN32
#包括
#包括
#包括
#包括
#否则
#包括
#包括
#包括
#包括
#包括
#恩迪夫
因为“#include”是告诉预处理器包含头的语法。磅后面的空格仅用于格式化,并非严格必需。

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

include指令告诉预处理器处理指定文件的内容,就像这些内容在该指令出现时出现在源程序中一样

实际上,#行不是由C编译器本身处理的,而是由编译管道早期运行的预处理器处理的。“#”是指它如何知道自己负责哪条线路

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

预处理器不仅可以像
#if
#ifdef
子句那样对表达式进行求值,还可以打开其他文件并使用
#include
插入它们,甚至使用
#define
子句进行文本替换

有关更多信息,请参阅


#include
与VB.Net
Imports
语句或C#
using
语句不同。这些类引用其他类,但是
#include
实际上会在源文件的该位置插入包含文件的文本。它可以递归地运行,因此包含的文件本身可能包含其他文件。

include
ifdef
等都是预处理器指令,因此它们前面必须有磅(或哈希)字符。编写此代码的程序员只是将所有
#
字符排列在左侧,以使代码看起来更干净(在他看来)

cplusplus.com有很多预处理器指令。

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

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


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

是的,就是这样。我被#和include之间的空格弄糊涂了。谢谢