__func__预定义标识符,_Pragma操作符,__VA_ARGS__

__func__预定义标识符,_Pragma操作符,__VA_ARGS__

__func__预定义标识符

1.功能

返回所在函数的函数名称。__func__预定义标识符在轻量级的调试代码中具有十分重要的作用,而在C++11中标准运行使用在类或结构体制。

2.举例

在VS2012中,func__为__FUNCTION,使用例程如下:

#include <iostream>
#include <string>

using namespace std;

const char* function_name(){ return __FUNCTION__;}
    //实际的定义过程如下
/*
const char* function_name(){
	const static char* __FUNCTION__="function_name"'
	return __FUNCTION__;
}
*/ 

int main()
{
	cout<<function_name()<<","<<endl;
	return 0;
}

在结构体中的应用:

#include <iostream>
#include <string>
using namespace std;
struct FuncStruct{

	FuncStruct():name(__FUNCTION__){}
	const char* name;
};
int main()
{
	FuncStructft;
	cout<<ft.name<<endl;   //FuncStruct::FuncStruct
	return 0;
}

__func__标识符不能作为函数参数的默认值

void FuncFail(string func_name = __FUNCTION__);  //编译报错,

错误原因为在函数声明时,__func__标识符还未定义。

_Pragma操作符

#pragma 是一条预处理指令。
#pragma once
上述指令为指示编译器(若编译器支持),该头文件只被编译一次,和以下代码达到的效果一样。
#ifndef DEFINE
#define DEFINE
//
#endif
在C++11中,_Pragma操作符与#pragma预处理指令具有同样的功能。
_Pragma(“字符串常量”)
_Pragma(“once”) => #pragma once

_Pragma是一个操作符,因此可以将_Pragma应用于宏中。

VA_ARGS

变长参数的宏定义是指宏定义中的参数列表的最后一个参数为省略号,__VA_ARGS__预定义宏可实现部分替换省略号所代表的字符串。比如
#define PR(…) printf(VA_ARGS) 为printf定义一个别名PR。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值