問題タブ [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 投票する
1 に答える
304 参照

gcc - const gcc 関数属性とグローバル const 変数

GCC ドキュメントから:

多くの関数は、引数以外の値を調べず、戻り値以外には何の効果もありません。関数はグローバルメモリを読み取ることができないため、基本的に、これは上記の純粋な属性よりもわずかに厳密なクラスです。

const私の質問は、グローバル値がグローバル メモリとしてカウントされるかどうかです。そうだと思いますが、不変として明示的にマークした値が、ここで可能な最適化を無効にする可能性があるのは奇妙に思えます。

例えば:

の使用はConstantModulusValue、私の理解では、この関数をマークしてはならないことを意味しますが、これもconst奇妙に思えます。これをマークすることには危険がありconstますか?

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

c - ネストされた関数に対する GCC 属性の影響

関数属性は、関数宣言に対してのみ指定できます (定義ではありません)。そのため、ネストされた関数の属性を指定できません。例えば:

このような場合、「hot_nested_function」は「hot」として最適化されますか?

UPD:ばかげた例では、gcc (手段およびより高い最適化レベル) は、 (ネストされた関数の場合) のgcc -O1有無にかかわらず、関数呼び出しをその本体に置き換えます。__attribute__ ((hot))ネストされた関数について思い出させるものは何もありません。

UPD2: gcc.git/gcc/tree-nested.cによると、親関数の参照、外部ラベルのジャンプなどを解決します。次の段階で、ネストされた関数は、インライン化機能を備えた独立した関数に変換されます。しかし、親関数の属性についてはまだ不明です。彼らは入れ子に適用しましたか?

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

python - 関数属性を再割り当てすると「到達不能」になります

dict関数呼び出しの結果を関数属性としてキャッシュする、単純な小さなデコレータがあります。

キャッシュを空にする可能性を追加したいと思います。したがって、dynamic_programming()関数を次のように変更します。

ここで、この小さなものを使用してフィボナッチ数関数を実装するとします。

しかし、キャッシュをクリアすると、奇妙なことが起こります。

または (新しい Python カーネルが実行されている状態で) 逆の方法で実行します。

clear()キャッシュに最初にアクセスした後、キャッシュが何らかの形で「到達可能」でないのはなぜclear()ですか。

(ちなみに、キャッシュを正しくクリアする解決策を知っています。f.cache.clear()割り当ての代わりに呼び出しを行うと、期待どおりに機能します。割り当ての解決策が失敗する理由{}に興味があるだけです。)

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

javascript - 関数の関数属性を作成します。これは、オブジェクト リテラルのメソッドです。

JS では、次のように関数内に関数を作成できることが知られています。

それが悪い慣習であるかどうかはわかりません (おそらくそうです)。適切に機能するので、使用してもかまいません。

しかしdigit()、あるオブジェクトのメソッドとして関数があるとしたらどうでしょうか (以下の例を参照)。
では、どのように宣言しdigit.five()ますか? のスコープで宣言したいとしますobj

obj.digitFive()新しいメソッドを作成せずにそれはまったく可能ですか?


PS: ユーザーnnnnnn は、 内に属性を作成できると言っています :obj.digit()

これが唯一の方法ですか?

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

c++ - GCC - 関数属性にマクロを使用すると、「初期化子がありますが、型が不完全です」というエラーが発生する

いくつかの単純な美化されたstructs を含むヘッダー ファイルがいくつかあり、その中に純粋な仮想メソッドが定義されています。コードは Visual Studio 2015 を使用する Windows で正常にコンパイルされますが、GCC が動かなくなります。まず、コード:

コード リスト



インポートされたヘッダー ファイルでinterfaceは、次のように定義されていstuctます。

そしてAPI_ABSTRACT、何の役にも立たない単なるマクロです:

これinterface typedefは、私が制御できない継承されたコードの一部であり、エクスポートする API 関数を制限するために、Windows と Linux でカスタム属性を定義API_ABSTRACTできるように配置されています。これは VS2015 でビルドされますが、Linux ではビルド エラーが発生します。



行を変更すると:

私がそれが翻訳されていると私が推測するものに:

コードは Linux で正常にコンパイルされます。でコンパイルしgcc -E -dDて、「前処理済み」のソースを画面にレンダリングしてtypedefとの#define置換を確認しましたが、ファイルの出力のみが表示され、.cppヘッダー ( .h) ファイルは表示されないようです。

質問

GCC でコンパイルしようとすると、このコードが機能しないのはなぜですか?

ありがとうございました。


編集#1


からの出力gcc -Eは、問題のある行を次のように示しています。

したがって、犯人はAPI_ABSTRACT何も評価しないマクロにあるようです。