让编译器声明并定位调试指针变量

Joe*_*l B 2 c unit-testing pointers initialization

说我有两个功能,如下所示:

unsigned char PlusTwo(unsigned char value)
{
    return (value + 2);
}
unsigned char PlusTwoUsingPtr(unsigned char *value)
{
    return (*value + 2);
}
Run Code Online (Sandbox Code Playgroud)

如果我想在开发过程中测试第一个函数,没问题,我所要做的就是:

PlusTwo(8);
Run Code Online (Sandbox Code Playgroud)

编译器会自动在内存中的某个位置为我放置一个常量.但是,要测试第二个函数,它会变得更复杂.首先我必须声明一个变量,然后传递函数变量的地址:

unsigned char eight = 8;
PlusTwoUsingPtr(&eight);
Run Code Online (Sandbox Code Playgroud)

这不是非常耗费时间,但它很烦人(特别是在C89/ANSI中,变量必须在功能块的开头声明).是否有一些技巧可以让我只在一行代码中测试这个函数,让编译器声明并在某个地方放置一个常量供我指点?

oua*_*uah 5

您可以使用标量类型的复合文字:

 PlusTwoUsingPtr(&((unsigned char){8}));
Run Code Online (Sandbox Code Playgroud)

复合文字是C99中引入的一个特性.有关信息,对象是可变的(具有静态存储持续时间),您也可以在函数中修改它.