做软件开发视频网站,徐州做网站建设的公司,网页设计版式布局,wordpress段落间距调整C语言一般提供三种预处理功能#xff1a;宏处理、文件包含、条件编译。头文件防卫式申明中会用到条件编译中 #ifndef、#define、#endif 的用法。所以#xff0c;首先价绍下条件编译。1 条件编译一般情况下#xff0c;在生成可执行文件的过程中#xff0c;源程序文件中的所有… C语言一般提供三种预处理功能宏处理、文件包含、条件编译。头文件防卫式申明中会用到条件编译中 #ifndef、#define、#endif 的用法。所以首先价绍下条件编译。1 条件编译一般情况下在生成可执行文件的过程中源程序文件中的所有代码行都进行编译但是在一些跨操作系统的情况下要求代码既能在 Windows 下编译运行也能在 Linux 下编译运行因为在不同的操作系统下调用的某些函数只能在特定的操作系统编译运行此时就需要使用条件编译让部分代码在满足特定条件下编译。条件编译的几种格式格式 1#ifdef 标识符 程序段代码1#else 程序段代码2#endif作用当标识符被定义过则对程序段代码 1 进行编译否则对程序段 2 进行编译。平时在进行程序调试过程中需要输出一些信息方便调试在调试结束后不需要这些信息输出我们可以这样处理#define DEBUG//然后在代码中需要输出调试信息的地方写一些输出信息例如#ifdef DEBUGprintf(调试需要输出的提示信息\n);#endif格式 2#ifndef 标识符 程序段代码 1 #else 程序段代码 2#endif作用:若标识符未被定义则编译程序段代码 1否则编译程序段代码 2。与格式 1 正好相反RELEASE 模式与 DEBUG 模式正好相对,所以格式 1 调试的例子也可以写成这样#define RELEASE//然后在代码中需要输出调试信息的地方写一些输出信息例如#ifndef RELEASEprintf(调试需要输出的提示信息\n);#endif格式 3#if 表达式 程序段代码 1#else if 表达式2 程序段代码 2#else 程序段代码 3#endif 跨平台项目开发采用条件编译可以同同一套代码在不修改代码的情况下在 Windows 平台与 Linux 平台编译通过生成可执行文件增加代码的可移植性。例如if __Linux__ //Linux专有函数代码#elif _Win32 //windows专有函数代码#else //其他平台专有函数代码#endif2 头文件防卫式声明在多文件包含的情况下有些变量何你可能被直接的或者间接的重复定义重复 #include 的问题也可能发生可以通过 #ifndef、#define、#endif 防卫式声明解决这一问题。范例头文件 head1.h 有如下定义int g_head1 1;头文件 head2.h 有如下定义int g_head2 2;源文件 .cpp 中使用 g_head1、g_head2代码如下#include head1.h#include head2.h#include using namespace std;int main(){ cout cout return 0;}随着项目增大或者其他需求可能出现头文件的包含例如头文件 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.hint g_head2 2;#endif修改后再次编译通过并成功执行使用#ifndef、#define、#endif 组合的防卫式声明避免了头文件内容被多次 include所以在写 .h 文件时要习惯性的使用文件防卫式声明。