在下面的宏中,returnValue
可以是任何类型。
typeof(FuncReturnType) returnValue = Func(); \
typeof(FuncReturnType) expectReturnValue = (zero value)
returnValue
可以是int
,double
pointer
,struct
等等。如何将expectReturnValue
声明为所有这些类型的零值?
答案 0 :(得分:1)
您应该能够使用任何类型的= { 0 };
。
例如:
int i = { 0 };
double d = { 0 };
struct y { int a; char b; } x = { 0 };
你可能会找到GCC的选项,导致它抱怨x
缺少初始值设定项,但你必须努力尝试。使用以下代码编译时,显示的代码可以完整地编译为目标文件。
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -Wmissing-prototypes \
> -Wstrict-prototypes -Wold-style-definition -c xx29.c
$
在标准范围内,§6.7声明指定:
初始化声明符:
声明符
声明者=
初始值设定项
§6.7.8初始化指定:
初始化:
赋值表达式
{
初始化列表}
{
初始化列表, }
¶11标量的初始值设定项应为单个表达式,可选择用大括号括起来。
此规则用于初始化i
和d
。