#ifndef _WINDOW_ else #endif

相信大家在看代码的时候经常看到下面的代码,一开始我也是一头雾水。不过在查找相关资料后,现在理解了其中的含义

#ifdef  __WINDOWS__
#define _PLATFORM_PREFIX_ __declspec(dllexport)
#else
#define _PLATFORM_PREFIX_ 
#endif

首先应该先明白#ifdef这个关键字的作用,我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。

下面举几个例子讲解一下:

#include <iostream>
using namespace std;
#define DEBUG


int main(int argc,char* argv[])
{
#ifdef DEBUG
cout<<"hello wrold"<<endl;
#endif
	return 0;
} 

运行结果为:
这里写图片描述

改写代码如下:

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
#ifdef DEBUG
cout<<"hello wrold"<<endl;
#else
cout<<"啦啦啦"<<endl;
#endif
	return 0;
} 

运行结果如下:
这里写图片描述

基础的大家应该理解了,下面讲一下的实际用法。#define一般定义在特定的头文件中。比如

//头文件test.h
#define DEBUG
#ifdef DEBUG
#endif
//源文件test.cpp
#include <iostream>
using namespace std;
#include "test.h"

int main(int argc, char* argv[])
{
#ifdef DEBUG
	cout << "Beginningexecutionofmain()" << endl;
#endif
	return 0;
}

运行结果:
这里写图片描述

如果一个C源程序在不同计算机系统上运行,而不同的计算机又有一定的差异。例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译:

#ifdef WINDOWS
#define MYTYPE long
#else
#define MYTYPE float
#endif

如果在Windows下进行编译则加上#define WINDOWS,这样则编译下面的命令行:

#define MYTYPE long

如果在这组条件编译命令之前未出现以下命令行:#define WINDOWS
则预编译后程序中的MYTYPE都用float代替。这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。当然以上介绍的只是一种简单的情况,可以根据此思路设计出其它的条件编译。

例如,在调试程序时,常常希望输出一些所需的信息,而在调试完成后不再输出这些信息。可以在源程序中插入以下的条件编译段:

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
#ifdef DEBUG
	cout << "is very good !" << endl;
#endif
	return 0;
}

如果是在调试时就加上#define DEBUG,这样就会打印调试信息:
这里写图片描述
调试结束就可以把#define DEBUG注释掉,这样打印信息就不会打印出来了:
这里写图片描述

还有下面这种形式:

#ifndef 标识符
//程序段1
#else
//程序段2
#endif

这个与上面差点就是第一行ifndef与ifdef的区别了。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。比如:

#include <iostream>
using namespace std;

#define DEBUG

int main(int argc, char* argv[])
{
#ifndef DEBUG
	cout << "is very good !" << endl;

#else
	cout<<"nihao"<<endl;
#endif
	return 0;
}

加上#define DEBUG就会输出nihao,去掉#define DEBUG 就会打印 is very good ! 。其实还有其他的格式但都和他差不多,就不一一介绍了。
感觉有用的小伙伴点个赞再走呗,哈哈!

感觉有用的小伙伴点个赞再走呗,哈哈!。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ma950924/article/details/81779352