奇妙なバグに遭遇しました。
私はブートローダーのコードを書いているので、派手なライブラリなどはあまりありません。
コード自体は非常に単純です。
int array[32] = { 1, 2, 3, [...snip...], 31, 32 };
このコードは、memcpy がリンクされていないという未解決の外部問題につながります。ただし、このコードは正常にコンパイルおよびリンクされます
int array[12] = { 1, 2, 3, [...snip...], 11, 12 };
実際、エラーはその間に発生します
int array[12] = { 0 };
と
int array[13] = { 0 };
最初のものは問題なくリンクしますが、2 つ目はリンクできません。サイズが 13 のときに、コンパイラが突然 memcpy に依存することを決定する理由がわかりません。-O0 と -O3 の両方で試しました。私のコンパイラはcl470と呼ばれるWindows実行可能ファイルですが、それがどこから来たのかよくわかりません。
もう1つの奇妙なことは、これを関数内に配置すると問題になることですが、配列をグローバルに宣言すると問題ありません。