为C中的随机类型使用宏指定零值?

时间:2017-02-20 04:27:04

标签: c macros

在下面的宏中,returnValue可以是任何类型。

typeof(FuncReturnType) returnValue = Func(); \
typeof(FuncReturnType) expectReturnValue = (zero value)

returnValue可以是intdouble pointerstruct等等。如何将expectReturnValue声明为所有这些类型的零值?

1 个答案:

答案 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标量的初始值设定项应为单个表达式,可选择用大括号括起来。

此规则用于初始化id