以下内容摘自libpng的pngconf.h:
libpng版本1.6.3 - 2013年7月18日
版权所有(c)1998-2013 Glenn Randers-Pehrson
我的问题是,给出以下宏预处理器:
#ifndef PNG_FUNCTION
#define PNG_FUNCTION(type, name, args, attributes) attributes type name args
#endif
#ifndef PNG_EXPORTA
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
extern attributes)
#endif
#ifndef PNG_EXPORT_TYPE
#define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
#endif
#ifndef PNGAPI
#define PNGAPI PNGCAPI
#endif
#define PNGCAPI __cdecl
#ifndef PNGARG
#define PNGARG(arglist) arglist
#endif
是以下等价物吗?
#ifndef PNG_EXPORTA
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
extern attributes)
#endif
相当于:
#ifndef PNG_EXPORTA
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
extern attributes PNG_EXPORT_TYPE(type) (PNGCAPI name) PNGARG(args)
#endif
最终相当于:
#ifndef PNG_EXPORTA
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
extern attributes PNG_IMPEXP type __cdecl name arglist
#endif
答案 0 :(得分:1)
@OliverCharlesworth写道:
大多数编译器允许您查看预处理器输出。例如,使用
-E
标志运行GCC。
@lurker写道:
乍一看,我会说对等问题的答案是“不”。我想你在翻译PNG_FUNCTION宏时插入了一些它们不存在的逗号。欢迎来到SO代码解析服务。 ;)
@JonathanLeffler写道:
你有
extern attributes,
,你应该只有extern attributes
。