c++宏

来源:互联网 发布:知乎精彩回答 微盘 编辑:程序博客网 时间:2024/06/03 13:51

_Pragma once操作符



#pragma是一条预处理指令,简单的说他是用来向编译器传达语言标注以外的一些信息
例如我们在头文件中定义了如下语句
#pragma once
则表示该指令会指示编译器该头文件只会被编译一次(保证头文件只被include一次)
而c++11中定义了与#pragma功能相同的操作符_Pgrama,它的表示形式如下
_Pragma(字符串字面量)
其使用方法和sizeof一样将字符串字面量作为参数卸载括号内即可,例如下面的语句和上面的效果一样
_Pragma("once");

注意:_Pragma()在vs2015中不可用



变长参数的宏定义以及_VA_ARGS_


变长参数的宏定义中参数列表中的最后一个参数为省略号,而预定义宏_VA_ARGS_则可以在宏定义的实现部分替换省略号所代表的字符,相关代码举例如下

//注意此段代码在vs2015中不可实现,因为_VA_ARGS_未定义

#include<iostream>


using namespace std;


#define pr(...) printf(_VA_ARGS_)


int main()
{
for (int i = 0; i < 9;i++)
{
pr("执行次数\n" );
cout << i << endl;
}


system("pause");
}



查看编译器中long long 值的最大值和最小值的方法


#include<iostream>


using namespace std;


int main()
{
cout<< LONG_MIN<< "_" << LLONG_MAX   << endl;


system("pause");
}



_cplusplus宏

用于c和c++的混编



#include<iostream>


using namespace std;


#ifdef _cplusplus
extern "C" {
#endif
//一些代码
#ifdef _cplusplus


}
#endif



断言函数 : assert()

它的作用是帮助程序开发者快速定位到那些违反了某些前提条件的程序错误,在c++中,标准在<cassert>或<assert.h>头文件中为程序员提供了assert宏,用于在程序运行时进行断言,相关举例如下:


#include<iostream>
#include<cassert>


using namespace std;


int function(int m)
{
assert(m != 0);
return 9 / m;
}
int main()
{
int a = function(0);
}