Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C语言中的预处理器示例_C++_C - Fatal编程技术网

C++ C语言中的预处理器示例

C++ C语言中的预处理器示例,c++,c,C++,C,我想要一些C预处理器指令的示例,例如: #define pi 3.14 #define MAX 100 我只知道这个。 我想知道更多关于预处理器指令的信息。最大的例子是 #include<stdio.h> 和使用 编译器定义了一些专有扩展,以允许您提供处理指令: #ifdef WIN32 // WIN32 is defined by all Windows 32 compilers, but not by others. #include <windows.h> #

我想要一些C预处理器指令的示例,例如:

#define pi 3.14
#define MAX 100
我只知道这个。
我想知道更多关于预处理器指令的信息。

最大的例子是

 #include<stdio.h>
和使用

编译器定义了一些专有扩展,以允许您提供处理指令:

#ifdef WIN32 // WIN32 is defined by all Windows 32 compilers, but not by others.
#include <windows.h>
#else
#include <unistd.h>
#endif
我经常使用预处理器进行调试构建:

#ifdef EBUG
printf("Debug Info");
#endif

$ gcc -DEBUG file.c //debug build
$ gcc file.c //normal build
正如其他人所指出的,有很多地方可以获得更多信息:


您是否完全熟悉基础知识,例如上所述?或者你需要一个初级教程?或者什么?

可能是


可以提供帮助。

处理器的功能远不止定义。别忘了#包含和条件编译


如果条件失败,这将停止编译

#define WIDTH 10
#define HEIGHT 20

#if WIDTH < HEIGHT
#    error "WIDTH must be greater than or equal to HEIGHT"
#endif
#定义宽度10
#定义高度20
#如果宽度<高度
#错误“宽度必须大于或等于高度”
#恩迪夫
C预处理器手册页
最重要的一点是:

#ifndef THIS_HEADER_H
#define THIS_HEADER_H

// Declarations go here    

#endif //THIS_HEADER_H
这样可以防止头文件多次包含在单个C文件中

对于gcc源代码,我喜欢使用
\uuuuuuuuuuuuuuuuuuuuuuuuu
,如下所示:

printf("%s: %d: Some debug info\n", __func__, __LINE__);

出于调试目的。

您的pi非常不准确。您可能希望从math.h中引入M_pi。此版本的pi比大约100年前在印第安纳州(而不是堪萨斯州)几乎通过法律的版本更准确:关于术语的说明,您称之为“预处理器”的名称更准确“预处理器指令”。术语“预处理器”指的是解释预处理器指令并相应修改源文件的程序。始终用括号保护宏扩展中的所有参数。考虑“<代码> max(x 3,y和4)< /代码>”;没有括号“(x> y)”为((x)>(y))。,它的计算结果与您的预期不符。您的头保护名称是非法的。Neil所指的是C(和C++)中的名称以下划线和大写字母开头的标识符保留给操作系统和语言实现的其他元素使用。@Tyler:否。它们保留给实现——系统库和编译器使用。换句话说,它们保留给头,例如/usr/include/linux下的头。这就是全部要点。作为系统头,这些头可以使用一个特殊的名称类,这样它们就可以避免与代码的命名冲突。因此,如果代码开始使用它们的名称,整个系统就会崩溃,您就有可能会遇到冲突。@Tyler标准在涉及保留名称时只提到操作系统语言实现。如果你所引用的文件是特定的C或C++实现的一部分,那么它们是合法的。如果它们来自EeleSe,就像一个POSIX头的全部木筏,那么它们就不是。在这里,没有什么新的东西。遗憾的是,除非你正在编写编译器,否则你应该避免从'y'。yop.i开始定义符号。修正了它,使其更通用。
#define WIDTH 10
#define HEIGHT 20

#if WIDTH < HEIGHT
#    error "WIDTH must be greater than or equal to HEIGHT"
#endif
#ifndef THIS_HEADER_H
#define THIS_HEADER_H

// Declarations go here    

#endif //THIS_HEADER_H
printf("%s: %d: Some debug info\n", __func__, __LINE__);