最近在看C++项目,发现项目里添加了好多#if等符号,查了一下,发现,他们作用不小。
所谓的#if等符号,包含#if,#elif,#ifdef,,#else,#ifndef,#endif,,总称条件编译。
首先,所谓的条件编译,是指在我们书写代代码完成之后,编译之前的预编译阶段发挥作用。大体就是决定是否编译。
举个例子,如果决定写入,就会在对应的EXE文件中包含此代码段,否则,不会包含。值得注意的是,if语句则不同,代码段都会编译进去,只是是否执行罢了。
而条件编译,则大多和宏定义有关。
————————————————编译软件为VS—————————————————
首先,说一下#ifdef,#elif,#else;
先新建一个项目,名为TXET,然后,新建一个类,名为Text,然后再此类里面定义一个宏text,
class Text
{
public:
Text();
~Text();
#define text
}
然后在主函数里引用此类,再加上#ifdef text,其后的代码段就会执行。注意,不论是何种类型,在最后都必须加上#endif。这是因为,其执行的是代码段,而不是与if似的不加花括号后的一句代码。
而#ifndef唯一不同的是,若该宏定义未被定义过,则执行#ifndef所含的代码段。
#ifdef text
cout << "Hello Earth";
#else
cout << "Hello Moon";
#endif
#if则后跟一个表达式。
而条件编译的另一个主要应用就是防止头文件的重复定义。就是在头文件中使用(#ifndef)定义一个宏,若调用此头文件时,就定义它。而当另外一个头文件被调用时,若此头文件包含上一个头文件时,则不会在加载它而直接到#endif。
这是一种方法,而微软则在类中使用#pragma once,既只用一次,来防止该现象。
#pragma once
class Text
{
public:
Text();
~Text();
#define text
};