假设我有两个类似下面的函数:
unsigned char PlusTwo(unsigned char value)
{
return (value + 2);
}
unsigned char PlusTwoUsingPtr(unsigned char *value)
{
return (*value + 2);
}
如果我想在开发过程中测试第一个功能,没问题,我所要做的就是:
PlusTwo(8);
编译器会自动在内存中为我放置一个常量。但是,要测试第二个函数,它会变得更复杂。首先,我必须声明一个变量,然后将函数传递给变量的地址:
unsigned char eight = 8;
PlusTwoUsingPtr(&eight);
这不是非常耗费时间,但它很烦人(特别是在C89 / ANSI中,其中variables have to be declared at the beginning是一个功能块)。是否有一些技巧可以让我在一行代码中测试这个函数,让编译器声明&在某个地方找一个常数供我指点?
答案 0 :(得分:5)
您可以使用标量类型的复合文字:
PlusTwoUsingPtr(&((unsigned char){8}));
复合文字是C99中引入的一项功能。 有关信息,对象是可变的(具有静态存储持续时间),您也可以在函数中修改它。