续行符
c++中宏定义规定,代码必须一行完成,例如:
#define CHECK(b, r) if(b) r=1; else r=0;
但是如果宏定义的逻辑较复杂,一行会导致代码可读性差,但是如果写成
#define CHECK(b, r)
if(b)
r=1;
else
r=0;
会被当成多行代码,编译器编译时会出错,违背了宏定义的原则。
我们可以使用“\”(续行符)来进行修改,如下所示:
#define CHECK(b, r)\
if(b)\
r=1;\
else\
r=0;
#if 、#ifndef 和 #ifdef
格式1
不同场景的判断使用。
格式
#if (判断条件)
程序段1
#else
程序段2
#endif
示例
#include <stdio.h>
#include <iostream>
using namespace std;
#define NODEBUG 1
int main()
{
#if (NODEBUG)
cout << "result:release" << endl;
#else
cout << "result:debug" << endl;
#endif
system("pause");
return 0;
}
格式2
一般用作测试。
格式
#ifdef 标识符
程序段1
#else
程序段2
#endif
示例
#define TEST 1
#ifdef TEST
cout << "test" << endl;
#else
cout << "no test" << endl;
#endif
格式3
- 头文件中使用,防止头文件被多重调用
- 作为测试使用,省去注释代码的麻烦
- 作为不同角色或者场景的判断使用
格式
#ifndef 标识符
程序段1
#else
程序段2
#endif
示例
//test.h
#ifndef TEST_H // 如果没有定义TEST_H, 定义TEST_H并执行下面代码, 定义了则直接#endif
#define TEST_H
#include "poll.h"
class Test {
// ...
};
#endif