問題タブ [compiler-flags]

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.

0 投票する
6 に答える
8226 参照

gcc - ファイルの末尾に改行がないという GCC の警告を無効にするフラグは何ですか?

改行警告が存在する理由についてのこの投稿を読んだところですが、正直なところ、私のチームにはいくつかの異なるプラットフォームといくつかの異なるエディターで作業している人々がいます (誰もが自分に最適なものを使用しています)。対処する価値のある警告ではなく、ノイズになり、深刻な警告を見つけるのが面倒になります。

多くの場合、重要な警告が見過ごされてきました。なぜなら、人々は無数の無用な警告を通り過ぎることに慣れてしまったため、明らかに注意深くそれらを見るのをやめてしまったからです。私たちの場合、GCC はオオカミを叫びすぎて誰も真剣に受け止められなくなっていると言えます。これは悪い態度ですが、それは人間の本性です。

警告が必要なため、現在は でコンパイルして-Wallいますが、改行警告を回避するためのカウンター フラグはありますか?

注:マニュアルを少し調べましたが、どこにも答えが明白に見つからなかったので、あきらめました。

注: Robert Gamble の完全に合理的な解決策に応えて、私たちのコードはクロスプラットフォームであり、Linux、Solaris、および Windows で人員とビルドを行っているため、改行... は合意に達していません。そして誰かのコンパイラはいつも泣き虫になる。40 人以上の開発者がいて、プログラマー以外のスタッフもいるからです。

0 投票する
6 に答える
846 参照

c - 単純な浮動小数点演算の奇妙な結果 - FPU の内部状態が悪い?

小さな単純な浮動小数点演算から時折奇妙な結果が得られるソフトウェア プロジェクトがあります。私が見逃しているものがあると思います。次の問題をデバッグする方法についてのヒントが欲しいです。

(使用されるコンパイラは、Microsoft C コンパイラのバージョン 12 である MS VC 6.0 です)

最初の異常:

何らかの理由で、タイマーの評価が失敗し、時間指定されたコードが実行されませんでした。デバッガーでは、トリガー条件が実際に真であることを確認するのに問題はありませんでしたが、FPU は肯定的な結果を見つけることを拒否しました。次のコード セグメントは、同じ操作を実行しましたが、問題はありませんでした。この問題は、失敗する可能性のある偽の評価を挿入することで回避されました。

FPU の状態は、実行された以前の操作によって何らかの形で汚染されていると思いますが、役立つコンパイラ フラグがいくつかあるのでしょうか?

2番目の異常:

デバッガーは式を約 0.05 と評価しますが、結果は #IND です。#IND 値は、fld 命令を使用して 2.0F 値が FPU にロードされると、FPU スタックに表示されます。前の命令は、fild 命令を使用して、整数値 2000 を double float としてロードします。FPU スタックに #IND 値が含まれると、すべてが失われますが、デバッガーは数式を問題なく評価します。後で、これらの操作は期待される結果を返します。

また、関数呼び出しの直後に FPU の問題が再び発生します。各新しい関数の後に FPU 状態をクリアする浮動小数点演算を挿入する必要がありますか? 何らかの方法で FPU に影響を与える可能性のあるコンパイラ フラグはありますか?

この時点で、すべてのヒントとコツに感謝します。

編集:トップ関数でアセンブリ関数EMMSを最初に呼び出すことで、問題を回避できました。そうすれば、私のコードが呼び出された環境で作成された、または作成されなかった可能性のある MMX 関連のガベージが FPU からクリアされます。FPU の状態は当然のことではないようです。

//フランク

0 投票する
5 に答える
70472 参照

c++ - g++ で静的ライブラリを作成するための最適化とフラグ

Linux で g++ コンパイラを使い始めたばかりで、コンパイラ フラグについていくつか質問があります。ここにある

最適化

最適化フラグについて-O1-O2および-O3g++ マニュアルページを読みました。これらのフラグをいつ使用するかがわかりませんでした。通常、どの最適化レベルを使用しますか? g++ のマニュアルには、 について次のように書かれています-O2

さらに最適化します。GCC は、容量と速度のトレードオフを含まない、サポートされているほぼすべての最適化を実行します。-O2 を指定すると、コンパイラはループ展開または関数インライン化を実行しません。-O と比較して、このオプションはコンパイル時間と生成されたコードのパフォーマンスの両方を向上させます。

インライン展開とループ展開を行っていない場合、パフォーマンスがどのように達成され、このオプションは推奨されますか?

静的ライブラリ

g++ を使用して静的ライブラリを作成するにはどうすればよいですか? Visual Studio で、クラス ライブラリ プロジェクトを選択すると、「lib」ファイルにコンパイルされます。g ++で同等のものは何ですか?

0 投票する
2 に答える
1771 参照

qt - コマンドの出力を Qt プロジェクト ファイルを介してコンパイラ フラグとして渡すにはどうすればよいですか?

「git describe」の出力をアプリケーションの about ウィンドウに追加しようとしているので、人々が使用しているアプリケーションのバージョンを簡単に見つけることができます。

次のコンパイラ フラグを追加することでそれを行うことができます: -DAPP_VERSION="$(git describe HEAD)"

しかし、プロジェクトはqmakeに基づいているため、これをQtプロジェクトファイルに入れる方法を見つけたいと思います。これは可能ですか?もしそうなら、どのように?

編集:以下を追加してみました:

QMAKE_CXXFLAGS += -DAPP_VERSION="$(git describe HEAD)"

しかし、「-DAPP_VERSION =」が表示されただけなので、エスケープ文字を使用する必要があると思いますが、どれがどこであるかわかりません。:/

0 投票する
5 に答える
2897 参照

c - 32 ビット環境と 64 ビット環境を区別するには、どのプリプロセッサ ディレクティブまたはその他の方法を使用すればよいですか?

次のCプログラムを 32 ビットおよび 64 ビット システム用にコンパイルしたいと考えています。

私が自分で行ってきたことは、Makefileパスイン-m32-64てビット固有のバイナリを作成することです:

これはうまく機能しますが、コンパイル時に警告が表示されます。

私がやりたいことは、2 つの「ビット」ターゲットに対して 2 つの main.c ファイルを持たずにこの警告を修正することです。

この違いを処理#ifndefするために の 14 行目に追加できるプリプロセッサ条件はありますか?main.c

または、これを処理するための別のより良い方法はありますか?

編集:私は次の解決策を使用しました:

0 投票する
6 に答える
40988 参照

c++ - Xeonのgcc最適化フラグ?

Xeon用に最適化するときにどのgccコンパイラフラグを使用するかを入力したいですか?

mtuneまたはmarchには「xeon」がないので、どちらが最も近いですか?

0 投票する
3 に答える
872 参照

c - 符号を無視する C コンパイラ フラグ

現在、サードパーティの請負業者から購入したコードを扱っています。1 つの構造体には unsigned char フィールドがありますが、そのフィールドを渡す関数には signed char が必要です。コンパイラは、それらを不一致の型と見なすため、これを好みません。ただし、明らかにその請負業者向けにコンパイルされます。一部のグーグルは、「[i] char オブジェクトが負の値を保持できるかどうかは実装によって定義される」と言っています。請負業者のコンパイラは、基本的に符号付き/符号なしの型を無視して、同じように扱うことができますか? または、それらを同じように扱うコンパイラフラグはありますか?

C は私の最強の言語ではありません。ユーザー ページのタグを見てください。

0 投票する
1 に答える
207 参照

gcc - 「tree」で始まる gcc フラグの特別な点は何ですか?

から始まる多くの最適化設定treeがあります。いくつかは次のとおりです。

それらのフラグの何が特別なのですか?

0 投票する
1 に答える
4215 参照

c - -symbolic と -shared GCC フラグの違いは何ですか?

ドキュメントの説明から、「すべてのシステムではなく」共有をサポートし、「一部のシステムのみ」がシンボリックをサポートすることを除いて、それらは同じことをしているようです(これらが同じシステムのセットであるかどうかは不明です):

-shared 他のオブジェクトとリンクして実行可能ファイルを形成できる共有オブジェクトを生成します。すべてのシステムがこのオプションをサポートしているわけではありません。予測可能な結果を​​得るには、このオプションを指定するときに、コードの生成に使用されたのと同じ一連のオプション (-fpic、-fPIC、またはモデル サブオプション) も指定する必要があります。[1]

-symbolic 共有オブジェクトを構築するときに参照をグローバル シンボルにバインドします。未解決の参照について警告します (リンク エディター オプション -Xlinker -z -Xlinker defs によってオーバーライドされない限り)。このオプションをサポートするシステムはごくわずかです。

違いは「他のオブジェクトとリンクして実行可能ファイルを形成できる共有オブジェクトを生成する」部分にあると思いますが、それはどのライブラリにも当てはまるように思えます。結果の共有オブジェクトも静的にリンクできるということですか?

0 投票する
1 に答える
2074 参照

iphone - Xcode: ファイル コンパイラ ビルド設定ごとにアーキテクチャ固有のビルド

私のiPhoneプロジェクトでは、インラインasmを使用していますが、ターゲットアーキテクチャがシミュレータではなくデバイスである場合は除外されます。

インライン asm コードの一部はアームのみで、thumb ではないため、iPhone 用にコンパイルするときに c フラグ -marm を指定する必要があります。

ファイル固有のビルド設定で -marm フラグを入力すると問題が発生し、シミュレーター用にコンパイルすると gcc がエラーを出力します。

cc1obj: エラー: コマンド ライン オプション "-marm" を認識できません

ターゲット アーキテクチャがアームの場合にのみ、このオプションを渡す方法はありますか? グローバルな c フラグを使用して実行できることはわかっていますが、プロジェクト全体を -marm フラグでコンパイルしたくありません。少数の .m ファイルだけを -marm にしたい。

ありがとう、キム