2

以下のような2つの関数があるとします。

unsigned char PlusTwo(unsigned char value)
{
    return (value + 2);
}
unsigned char PlusTwoUsingPtr(unsigned char *value)
{
    return (*value + 2);
}

開発中に最初の関数をテストしたい場合は、問題ありません。必要なのはこれだけです。

PlusTwo(8);

コンパイラは自動的に定数をメモリ内のどこかに配置します。ただし、2番目の関数をテストするには、さらに複雑になります。最初に変数を宣言し、次に関数に変数のアドレスを渡す必要があります。

unsigned char eight = 8;
PlusTwoUsingPtr(&eight);

これはそれほど時間のかかることではありませんが、面倒です(特に、関数ブロックの先頭で変数を宣言する必要があるC89 / ANSIでは)。この関数を1行のコードでテストし、コンパイラーに定数を宣言して、ポイントする場所に配置させるトリックはありますか?

4

1 に答える 1

5

スカラー型の複合リテラルを使用できます。

 PlusTwoUsingPtr(&((unsigned char){8}));

複合リテラルは、C99で導入された機能です。詳細については、オブジェクトは(静的ストレージ期間で)変更可能であり、関数で変更することもできます。

于 2012-06-06T19:17:52.470 に答える