C语言通常提供三种预处理功能:宏处理,文件包含和条件编译。条件编译中#ifndef,#define,#endif的用法将在头文件的防御声明中使用。
因此,首先,我们将提供条件编译。 1条件编译通常,在生成可执行文件的过程中,源文件中的所有代码行都会被编译,但是在某些跨操作系统的系统中,要求代码可以在Windows下编译并运行,或者在编译后运行。
在Linux下,因为某些在不同操作系统下调用的功能只能在特定操作系统上编译和运行。这时,需要条件编译以允许在某些条件下编译部分代码。
条件编译的几种格式格式1 #ifdef标识符程序段代码1#else程序段代码2#endif功能:定义标识符时,将编译程序段代码1,否则,将编译程序段2。通常,在调试程序的过程中,必须输出一些信息以方便调试。
调试完成后,不需要输出此信息,我们可以这样处理:#define DEBUG //然后在需要输出调试信息的代码中写一些输出信息,例如:#ifdef DEBUG printf(“需要输出以进行调试的提示信息 #endif格式2 #ifndef标识符程序段代码1 #else程序段代码2#endif功能:如果未定义标识符,则将编译程序段代码1,否则将编译程序段代码2。与格式1相同。
相反,RELEASE模式与DEBUG模式完全相反,因此格式1的调试示例也可以这样写:#define RELEASE //然后写一些输出信息,其中调试信息是代码中所需的内容,例如:#ifndef RELEASE printf(“提示需要输出的信息以进行调试 ");#endif Format3 #if表达式程序段代码1#else if表达式2程序段代码2#else程序段代码3#endif使用条件编译的跨平台项目开发可以与同一组代码相同无需修改代码对于Windows和Linux平台,请编译并生成可执行文件以提高代码的可移植性。例如:if __Linux__ // Linux专有功能代码#elif_Win32 // windows专有功能代码#else //其他平台专有功能代码#endif 2头文件防御声明。
在包含多个文件的情况下,可以直接或间接重复定义某些变量。重复#include的问题也可能发生。
您可以使用#ifndef,#define,#Endif防御性声明解决此问题。示例:头文件head1.h具有以下定义:int g_head1 = 1;头文件head2.h具有以下定义:int g_head2 = 2; g_head1,g_head2在源文件中使用。
cpp代码如下:#include“ head1.h” #include“ head2.h” #include使用名称空间std; int main(){cout cout return 0;} As如果项目不断增长或有其他需要,则可能会出现包含头文件的信息,例如,头文件head2.h包含头文件head1.h,而头文件head2.h如下:#include“ head1.h” ;; int g_head2 = 2;此时,在编译中将出现重复的定义错误,这是因为源文件.cpp包含头文件head1.h,head2.h”,并且head2.h还包含head1.h头文件,所以由head1.h定义的g_head1被定义了两次。头文件head1.h防御语句转换#ifndef _HEAD1_#define _HEAD1_int g_head1 = 1; #endif头文件head2.h防御语句转换#ifndef_HEAD2_#define_HEAD2_#include“ head1.h” intg_head2 = 2; #endif修改后编译再次,成功传递并执行,使用#ifndef,#define和#endif的组合的防御声明,以避免多次包含头文件内容,因此在编写.h文件时,应习惯性地使用文件防御样式声明。
另外,发送四张算法备忘单。算法备忘单是由我的朋友labuladong编写的。
他的新书“ labuladong的算法备忘单”已出版。恭喜你本书的内容来自他github上的一个73k star项目,每个从事技术工作的人都了解73k star的概念。
本书将带您逐步解决算法问题,全彩色,超过400页以及大量干货。作者以易于理解的语言清楚地解释了许多经典算法问题,其中许多是在与知名公司的访谈中经常遇到的问题。
经过彻底的你。