私は組み込みのものを扱っているので、MCU 用の特別な C コンパイラ C30 を使用しています。一時的な構造での動作について混乱しています。
しかし、おそらく私は何かを知りません、そしてそれは意図された動作ですか?
少しのコードを考えてみましょう:
typedef struct {
int a;
int b;
} T_TestStruct1;
void test1(T_TestStruct1 *p_test_struct)
{
/* do something */
}
そして、これらの呼び出しtest1()
:
void some_function()
{
{
T_TestStruct1 par = {
.a = 1,
.b = 1,
};
test1(&par);
}
{
T_TestStruct1 par = {
.a = 2,
.b = 2,
};
test1(&par);
}
}
ここではすべて問題ありません。スタックには のインスタンスが 1 つだけT_TestStruct1
割り当てられています。しかし、私はより短い表現を使用するのが好きです:
void some_function()
{
test1(&(T_TestStruct1){
.a = 1,
.b = 1,
});
test1(&(T_TestStruct1){
.a = 2,
.b = 2,
});
}
次に、構造体{.a = 1, .b = 1}
と構造体の両方{.a = 2, .b = 2}
がスタックに割り当てられます。しかし、私の意見では、そうすべきではありません。実際に必要なインスタンスは 1 つだけです。
たまたま、私はそれを試しました:
void some_function()
{
{
test1(&(T_TestStruct1){
.a = 1,
.b = 1,
});
}
{
test1(&(T_TestStruct1){
.a = 2,
.b = 2,
});
}
}
結果は同じです。
それで、それは意図された動作ですか、それともコンパイラのバグですか?