C #ifdef#else#endif宏问题
我是C语言的新手,我正在维护别人的代码。我在头文件中发现了这个。我可以理解,如果源代码在windows上编译,它将输入if语句,否则如果代码在linux上编译,它将输入else语句。如果我错了,请纠正我 但是,问题是为什么在所有include头前面使用#(hash) 非常感谢您的建议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
#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.NetImports
语句或C#using
语句不同。这些类引用其他类,但是#include
实际上会在源文件的该位置插入包含文件的文本。它可以递归地运行,因此包含的文件本身可能包含其他文件。include
,ifdef
等都是预处理器指令,因此它们前面必须有磅(或哈希)字符。编写此代码的程序员只是将所有#
字符排列在左侧,以使代码看起来更干净(在他看来)
cplusplus.com有很多预处理器指令。#include是在C中包含文件的方式
您可能会对#和include之间的空格感到困惑
但它们并不重要。这些行仍然是#include。是的,就是这样。我被#和include之间的空格弄糊涂了。谢谢