欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ define用法

程序员文章站 2024-03-23 10:47:58
...

转载地址:https://www.cnblogs.com/AkazaAkari/p/6899935.html

 

1 定义常量

#define ARRMAX 50

int arr[ARRMAX];

 

2 代替模板函数或者内联函数,将函数定义成宏

执行效率很快

#define SWAP(a,b) do\
{\
decltype(a) temp = a;\
a = b;\
b = temp;\
}while(0)

[1]函数定义块如果需要换行,那么换行是结尾需加反斜杠

[2]可以利用decltype来获得函数参数的类型,方便函数中内容的执行

[3]利用do while(0)可以使函数中的变量变成局部变量,且使语法清晰减少出错

[4]有时可用这种宏的方式可以代替c++的模板,执行效率要比模板快

[5]因为是文本替换,所以尽量不要把分号写进去,在调用的时候补充分号

 

3 预编译逻辑判断

#include <iostream>
#include <string>
#include "test.h"

using namespace std;

#define DEBUG


void MyLog(string logger)
{
#if defined(DEBUG)
    cout << "Logger In This:" << logger << endl;
#endif
}

int main(int argc, char** argv)
{

#if defined(WIN32)
    cout<<"this device is WIN32" << endl;
#endif 

#if !defined(WIN32)
    cout<<"this device is not WIN32" << endl;
#endif 

#if defined(WIN32)&&defined(LINUX)
    cout <<"win32 and linux" << endl;
#endif
    MyLog("1");
    MyLog("2");
    MyLog("3");
#undef DEBUG 
    MyLog("4");

    system("pause");
}

可以利用#if #elif #else #endif来进行编译时的逻辑处理。逻辑判断的内容主要是是否define了某个宏。检查是按照文件声明顺序依次来的。

[1]可以使用与或非逻辑判断

[2]一旦代码开始编译函数后,#define 和 #undef将被无效化,要在文件开头处使用#define 或 #undef

#include <iostream>

#define DEBUG //有效

using namespace std;

#define DEBUG //有效

int i = 10;

#define DEBUG //有效

int add(int i , int j)
{

#define DEBUG //无效

}

#define DEBUG //无效

int main()
{

#define DEBUG //无效

[3]可利用这个防止头文件被重复加载,也能用这个来编写Logger,只需修改某个头文件的DEBUG宏,就能让程序中的所有Logger开启或关闭打印。