1

以下内容来自 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
4

1 回答 1

1

@OliverCharlesworth 写道:

大多数编译器允许您查看预处理器输出。例如,使用-E标志运行 GCC。

@lurker 写道:

乍一看,我会说对等问题的答案是“不”。我认为您在翻译 PNG_FUNCTION 宏时在不存在的地方插入了一些逗号。欢迎使用 SO 代码解析服务。;)

@JonathanLeffler 写道:

你有extern attributes,你应该有的地方extern attributes

于 2016-05-09T11:25:19.423 回答