0

charsのバッファーがあり、memcpyの使用を避け、int*変数を介してそれにアクセスしたいとします。

char buffer[100];
strcpy(buffer,"Hello");
int* __restrict ptr=(int*)buffer;
*ptr= 97;
printf("%s",buffer);

もちろん、これは「a」を出力します。
未定義の動作に遭遇することなくこれを行うことは許可されていますか?

4

1 に答える 1

1

もちろん、これは「a」を出力します。

まあ、リトルエンディアンのマシンでのみ。

また、厳密なエイリアシングは、タイプの1つであるため、例とは関係charがなく、コンパイラがエイリアスがないと想定するケースの数を増やすことcharが目的でrestrictない場合、つまり情報を入力する場合でも、エイリアシングを行う可能性があります。それを防がないでください。

そして明らかに、__restrictどれが実装ドメインにあるかについての情報が必要な場合は、実装を指定する必要があります。

于 2012-11-16T20:42:46.220 に答える