問題タブ [gcc4.9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 構造体の初期化におけるgcc 4.9のバグ?
私はコードを持っています:
私は gcc 4.8.2 と 4.9.2 を持っています。次の方法で問題なくコンパイルできます。
ただし、次のようにコンパイルすることはできません。
コンパイラの出力は次のとおりです。
これはバグですか、それとも私が何かを理解していないだけですか?
c++ - gccではなくVisual Studioを使用して「stol」によってスローされた例外
次のコードは、Visual Studio 2013 で実行すると例外をスローしますが、gcc 4.9.2 ではスローしません。
報告されたエラーは次のとおりです。
「例外: stol 引数が範囲外です」
stol
は a を返すlong
ので、 のサイズはtemp
戻り値を保持するのに十分な大きさでなければなりません。
誰でもその動作を説明できますか。これはおそらくコンパイラのバグですか?
memory-alignment - ARM Cortex-M4、uint64_t、および GCC 4.9 の va_arg
次のコードがあります。
これを実行すると、次の値が得られます。
arg1 = 0xABABABAB
arg2 = 0x24242424F0F0F0F0
arg3 = 0x010048E7
変数 arg3 には Flash のアドレスが含まれているようです。
これはスタック アライメントが原因である可能性があることをどこかで読みました (これが、これらすべてのアライメント属性が表示される理由であり、特に変数を関数スコープ外に外部化した理由です)。また、「-mabi=aapcs -std=c99」フラグを使用してコードがコンパイルされていることも確認しました。
関数が呼び出されたときに {r0-r3} レジスタを調べたところ、最初の 3 つの引数が正しく含まれているようです (r2 と r3 にはリトルエンディアン ワードで 64 ビット値が含まれています)。
例外中 (たとえばハード フォールト)、可変個引数が適切に機能することに気付きました。また、MCU は例外ルーチンに入るときに 8 ビット スタックを使用するように設定されているため、これが何が起こっているかの説明になります。
実際に何が起こっているのかを理解するための助けは本当にありがたいですか? これはどのように修正できますか?