問題タブ [function-attributes]

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 投票する
3 に答える
11646 参照

c++ - さまざまなコンパイラでの pure/const 関数属性

pureは、関数がグローバル メモリを変更しないことを示す関数属性です。
constは、関数がグローバル メモリを読み取ったり変更したりしないことを示す関数属性です。

その情報があれば、コンパイラはいくつかの追加の最適化を行うことができます。

GCC の例:

その例では、コンパイラは関数calculateを次のように最適化できます。

または、コンパイラが十分に賢い場合 (フロートについてそれほど厳密ではない場合):

GCC、Clang、ICC、MSVC などのさまざまなコンパイラに対して、このような方法で関数をマークするにはどうすればよいですか?

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

python - 関数属性を使用して、遅延(潜在的な)処理の結果を格納する

私はいくつかの衝突検出を行っていますが、2つの異なるコンテキストで同じ関数を使用したいと思います。ある文脈では、私はそれが次のようなものになりたいです

そして別の中で、私はそれがなりたいです

ここに2つの関数を書くというアイデアは本当に嫌いです。名前をまっすぐに保つことは1つのターンオフであり、衝突検出へのインターフェースを複雑にすることは別のことです。だから私は考えていました:

今、私がチェックをしたいとき、私は言うことができます:

また

そして、私が実際にそれらを調べたい他の文脈では、私は次のことができます:

どちらの場合も、必要以上の処理は行いません。

これは最初の2つの関数よりも多くのコードであると認識していますが、次の利点もあります。

  1. 衝突検出へのインターフェイスを、ノードが中間レベルではなく最上位レベルにあるツリーとして保持します。これはもっと簡単なようです。

  2. 便利なピーク機能で自分自身をフックアップします。もう一度使用すると、実際に記述しているコードは少なくなります。(YAGNIに応えて、持っていればそうします)

それで。あなたが私がどこに住んでいるかを知っていることわざの殺人マニアであるならば、私が上記のコードを書いたならば、私はあなたからの訪問を期待しますか?もしそうなら、あなたはこの状況にどのようにアプローチしますか?

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

objective-c - 関数をリターンタイプでマークしてリターンしないようにするにはどうすればよいですか?

何かを返す関数で何も返さない場合、コンパイラは関数が何も返さないことを警告します。

しかし、関数を呼び出しabort()ても、コンパイラは警告しません。このように自分の関数をマークするにはどうすればよいですか。

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

c++ - GCCのprintfフォーマット属性をC++11可変個引数テンプレートで使用するにはどうすればよいですか?

ロギングシステムのフロントエンドであるC++クラスがあります。そのロギング機能は、C++11の可変個引数テンプレートを使用して実装されます。

各ロギングバックエンドは、独自のバージョンのを実装します。true_logこれは、特に、転送されたパラメータを使用してを呼び出しますvsnprintf。例えば:

すべてがうまく機能し、私は幸せです。

ここで、パラメーターに静的チェックを追加しlog()ます。具体的には、GCCのprintfフォーマット属性を使用します。

log()関数にタグを付けることから始めました__attribute__ ((format (printf, 2, 3)))this最初の「非表示」パラメーターと同様に、パラメーターのインデックスを1つシフトする必要があります)。コンパイルエラーで失敗した場合、これは機能しません。

次に、同じ属性をtrue_log()関数に追加しようとしました。コンパイルされますが、実際にはエラーチェックは実行されません。いくつかの無効な形式/変数の組み合わせを渡そうとしましたがlog()、警告は発行されませんでした。たぶん、この種のチェックは「遅すぎる」、つまり、変数に関する情報が一連の呼び出しで失われたのでしょうか。

最後の手段として、で注釈を付けるlog()__attribute__ ((format (printf, 2, 0)))、間違った形式の文字列に関する警告が表示されますが、無効な形式と変数の組み合わせに対する診断は発行されません。

問題の要約:C ++ 11の可変個引数テンプレートを使用する場合、GCCから完全な形式をチェックするにはどうすればよいですか?

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

c - force_align_arg_pointer関数属性を説明する

GCCドキュメントから

Intel x86では、force_align_arg_pointer属性を個々の関数定義に適用して、代替prologueを生成し、epilogueそれを再調整することができますruntime stack。これは、4バイトに整列されたスタックで実行されるレガシーコードと、16バイトのスタックを保持する最新のコードの混合をサポートしますSSE compatibility。代替プロローグとエピローグは通常のものよりも遅くて大きく、代替プロローグにはscratch register;が必要です。これにより、。と組み合わせて使用​​すると、使用可能なレジスタの数が減りますregparm attribute。このforce_align_arg_pointer属性はネストされた関数と互換性がありません。これはハードエラーと見なされます。

具体的には、プロローグ、エピローグ、およびSSEの互換性とは何ですか?

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

llvm - LLVM Attributes::NoUnwind を Function に設定する方法は?

これは非常に単純な質問だと思いますが、解決できません。とても悲しい。そう。私がする時

次のコードで興味深い test.cpp を取得します。

しかし、次のような文字列を書きたいときPAWI.Attrs = Attribute::None | Attribute::NoUnwind;

私のプロジェクトでエラーが発生しました IntelliSense: no operator "=" matches these operands operand types are: llvm::Attributes = int何をする必要がありますか? 必要なすべてのヘッダーが含まれています。[OS - Windows 7 x64、LLVM - 3.2]