首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于_VA_ARGS_宏的有关问题

2013-12-22 
关于__VA_ARGS__宏的问题编译环境为VC。想要在可变参数宏中遍历各个参数:在VS2012下试了一下,果然如此,g++

关于__VA_ARGS__宏的问题
编译环境为VC。想要在可变参数宏中遍历各个参数:



在VS2012下试了一下,果然如此,g++是没问题的。

把VS的宏替换的过程研究了一下,发现是由于VS出现了非标准问题,本来__VA_ARGS__应被视作多个参数(多于一个实参的情况下),但微软的编译器开发人员把它实现为都视作一个参数了,可以用一个辅助宏ATTR过渡一下,修改后的代码:


#include "stdafx.h"
#include <cstdio>

#define ATTR( attr ) attr
#define ATTR_1( attr ) printf_s( attr )
#define ATTR_2( attr, ... ) ATTR_1( attr ); ATTR( ATTR_1( __VA_ARGS__ ) )
#define ATTR_3( attr, ... ) ATTR_1( attr ); ATTR( ATTR_2( __VA_ARGS__ ) )
#define ATTR_4( attr, ... ) ATTR_1( attr ); ATTR( ATTR_3( __VA_ARGS__ ) )
#define ATTR_5( attr, ... ) ATTR_1( attr ); ATTR( ATTR_4( __VA_ARGS__ ) )
#define ATTR_6( attr, ... ) ATTR_1( attr ); ATTR( ATTR_5( __VA_ARGS__ ) )

int _tmain(int argc, _TCHAR* argv[])
{
ATTR_6( "1", "2", "3", "4", "5", "6" );
return 0;
}

热点排行