問題タブ [c99]
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 - 印刷、変換でFPU丸めモードを考慮したコンパイルプラットフォーム
編集:デバッグセッション中に間違いを犯したため、この質問をすることになりました。私が見た違いは、実際にはdoubleの印刷とdoubleの解析(strtod
)にありました。スティーブンの答えは、この修正後も私の質問を非常によくカバーしているので、誰かに役立つ場合に備えて、質問はそのままにしておくと思います。
私がアクセスできるいくつかの(ほとんどの)Cコンパイルプラットフォームは、FPU丸めモードを考慮に入れていません。
- 64ビット整数を
double
;に変換します。 - 印刷
double
。
ここでは非常にエキゾチックなものはありません。MacOSXLeopard、最近のさまざまなLinuxおよびBSDバリアント、Windows。
一方、Mac OS X Snow Leopardは、これら2つのことを行うときに、丸めモードを考慮に入れているようです。もちろん、異なる行動をとることは私に終わりがないことを苛立たせます。
2つのケースの典型的なスニペットは次のとおりです。
私の質問は次のとおりです。
- すべてのプラットフォームで動作を正規化するためにできる、醜くないことはありますか?丸めモードを考慮に入れているプラットフォームに、またはその逆を行わないように指示するための隠された設定はありますか?
- 動作の標準の1つですか?
- FPU丸めモードを使用しない場合、何が発生する可能性がありますか?ゼロに向かって丸めますか?最も近いものに丸めますか?選択肢は1つしかないことを教えてください:)
2.について標準では、整数に変換された浮動小数点数は常に切り捨てられる(ゼロに丸められる)と言われている場所を見つけましたが、整数->浮動小数点数の方向については何も見つかりませんでした。
c - MinGW エラー「「typeof」への未定義の参照」
「「typeof」への未定義の参照」エラーが発生します-これをコンパイルおよびリンクします:
gcc のバージョンは 4.3.3、コマンド ラインは "gcc.exe -std=c99 1.c -o 1.exe" です。
floating-point - C99と浮動小数点環境
私はC99の新機能を調べていて、浮動小数点環境を見ました。
私の質問は簡単です。浮動小数点数の計算を実行している場合、上記のプリプロセッサディレクティブをコードに含める必要がありますか?いいえの場合、このディレクティブは何を行い、いつ含めることが重要になりますか?
どうもありがとう...
c - 定義の関数見出しの後のC変数宣言
FreeBSDのソースコードを読んでいると( radix.hの158〜173行目を参照)、定義の「関数の見出し」に続く変数宣言を見つけました。
これはISOC(C99)で有効ですか?これは、「関数の見出し」内で変数を宣言するだけでなく、本番コードでいつ実行する必要がありますか?なぜここで行われているのですか?
次のような文字列の見出しの関数を参照します。int someFunction(int i, int b) {
c++ - 構造体ビットフィールドの最大サイズ (C99、C++)
ビット構造体フィールドの最大ビット幅は?
ビットフィールドのサイズが最大 128 ビット、または 256 ビット、またはそれ以上で、構造体内にビットフィールドを定義できますか? sse2 (128 ビット)、avx1/avx2 (256 ビット)、avx-512 (次の Xeon Phis では 512 ビット) レジスタなど、いくつかの幅の広いベクトル タイプがあります。また、gccの__int128などの拡張機能もあります。
double - C99 の double_t
C99にはdouble_tがあり、少なくともdoubleと同じ幅でなければならないことを読んだところです。これは、小数点以下の桁数がより正確になることを意味しますか? double? の通常の 15 桁以上。
第二に、それを使用する方法: 含まれているだけです
足りる?long double の場合は FLT_EVAL_METHOD を 2 に設定する必要があることを読みました。これを行う方法?私は数値的手法を扱っているので、任意精度のライブラリを使用せずに最大の精度が必要です。
どうもありがとう...
c - MS VS 2008 および C99
「C99はどのくらい普遍的にサポートされていますか?」という投稿を興味深く読みました。その中のコメントの 1 つは、Microsoft が C99 をサポートしていないことを指摘しています。ただし、コメント記号 // は VS 2008 で機能し、この記号は C99 にあります。2 つの質問があります。
VS 2008 は C99 をどの程度サポートしていますか?
同じコードで C89 と C99 の構文を混在させても問題ありませんか? したがって、C89 でコードを記述し、コメント //. これは、混合コーディングを行っていることを意味します。では、そのような場合、コンパイラは何をしますか? 最初に c89 でコードをチェックし、次に C99 でコードをチェックして、コメントに // を使用していることを受け入れますか?
c - C99 で実装するのが簡単ではない、利用可能な GNU C 拡張機能は何ですか?
Linux カーネルが GCC でしかコンパイルできないのはなぜですか? 一部のプロジェクトで本当に必要な GNU C 拡張機能とその理由は何ですか?
gcc - GCCを使用して自立型環境用にコンパイルするにはどうすればよいですか?
私が取り組んでいるコードは、ホスト環境と自立環境の両方でビルドできるはずであり、後者の場合のいくつかのstdlib関数のプライベート実装を提供します。
通常のワークステーション/ビルドサーバーでGCCだけでこれを確実にテストできますか?GCCを使用して自立環境用にコンパイルする
「-ffreestanding」オプションは有望に見えましたが、組み込みを無効にし、STDC_HOSTEDマクロを適切に設定する「のみ」のようですが、それでもすべてのシステムヘッダーを提供します。
オプション「-nostdinc」は制限が厳しすぎます。自立型の実装に必要なヘッダー(特にstddef.hとlimits.h)を引き続き使用したいと思います。
ここで何が欠けていますか?
ああ、私は今のところGCC 4.4.3を使用していますが、「すぐに」4.5.0にアップグレードします。
c - プラグマswp、ivdep、さまざまなコンパイラでのプリフェッチのサポート
優れたAltixマニュアル(altix_single_cpu_optimization http://wwwuser.gwdg.de/~parallel/parallelrechner/altix_documentation/altix_single_cpu_optimization.pdf)で、コンパイラを最適化するためのプラグマのヒントのリストを見つけました。
これらのプラグマをサポートしているコンパイラは何ですか?そして、リンクされた最適化を実装するものは何ですか(ソフトウェアパイプラインは、低ipcおよび低regカウントプロセッサのかなり難しい最適化の1つです)?