問題タブ [calling-convention]
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++ - __stdcall 関数ポインターを宣言する方法
私はこれを試しました
これはコンパイルされますが、次の警告が表示されます (VS2003):
警告 C4229: アナクロニズムが使用されています: データの修飾子は無視されます
stdcall 呼び出し規約で関数へのポインターを宣言したいですか? 私は何を間違っていますか?
android - 通話終了後に通話履歴から通話を削除する
Android開発は初めてです。番号に電話をかけたいのですが、その番号を通話履歴に保存したくありません。通話終了後に通話履歴から番号を削除するにはどうすればよいですか?
c - C: スタック/レジスタの質問による戻り値
私はCが初めてで、理解できないことが1つあります。関数がレジスタよりも大きくないものを返す場合、私のコンパイラはそれを EAX に入れます。大きな構造体 (ポインターではなく構造体自体) を返すと、スタック経由で返されます。
私の質問は、別のオブジェクトによってエクスポートされた関数を呼び出す方法をコンパイラがどのように知っているかです。呼び出し規約 (stdcall など) がありますが、それは戻り値を読み取るのではなく、引数を渡すことに関するものですよね?
「戻り値がEAXよりも大きいと宣言されている場合は、[bp-...]から取得する」などのルールが必要です。
もう 1 つ: 私が返したいオブジェクトは、レジスターよりも大きく、ヒープに格納し、スタック操作以外のすべてを防ぐためにポインターによって返す必要があると言うのは正しいでしょうか?
ありがとう。
c++ - C++関数パラメータによる連続メモリ保証
Appel [App02]は、アドレス演算子が関数ブロック内の仮パラメーターの1つに適用される場合、レジスターではなく、C(およびおそらくC ++)が連続メモリー内の実際のパラメーターの位置に関する保証を提供することを非常に簡単に述べています。
例えば
および次のような呼び出し...
次の出力「1234」が生成されます
私の質問は、「これは呼び出し規約とどのように相互作用するのですか?」です。
たとえば、GCCの__fastcallは、最初の2つの引数をレジスタに配置し、残りをスタックに配置しようとします。2つの要件は互いに対立していますが、何が起こるかについて正式に推論する方法はありますか、それとも実装で定義された動作の気まぐれな性質の影響を受けますか?
[App02] Javaでの最新のコンパイラ実装、Andreww。Appel、第6章、124ページ
更新:この質問は答えられたと思います。私が探していたもの(および参照が話しているもの)が、address-ofの使用によるメモリ内のパラメータの必要性の間の明らかな不一致である場合、呼び出し規約によるレジスターでは、おそらくそれは別の日の質問です。
インターネット上の誰かが間違っていて、時々誰かが私であるということです。
c - 手続き発動時間
プロシージャの起動時間は、関数呼び出しの準備が実行されるコンパイル時間の一部ですか?
それとも、関数が実際に呼び出されるのは実行時の一部ですか?
(確かではありませんが、私は2番目のオプションにかかっています)
c++ - 呼び出し規約をあまり気にしない場合、__fastcall よりも「デフォルト」の呼び出し規約を優先する必要がありますか?
多くの COM オブジェクトを含む巨大な C++ コードベースがあります。COM に公開される各関数には__stdcall
呼び出し規約 (通常はSTDMETHODCALLTYPE
マクロ) が必要なため、多くの関数が とマークされていますSTDMETHODCALLTYPE
。
ここで、COM を介して直接呼び出されたのではなく、C++ コード内からのみ呼び出された関数を確認しました。この関数STDMETHODCALLTYPE
のシグネチャにもマクロが含まれています。マクロが役に立たないことは完全に確信しています.COMを介してその関数を呼び出すことはありません。
__stdcall
「デフォルト」の呼び出し規約関数になるように削除する必要がありますか? どうすればそのような決定を下せますか?
c++ - 呼び出し規約はコンパイラまたはリンカによって処理されますか?
関数プロトタイプに_stdcall
(呼び出し元がスタックをクリアする必要はありません) を配置すると、コンパイラまたはリンカーによって処理されますか?
c - Win VS2008 呼び出し規約: c からの Delphi dll
ac アプリ (VS2008、Win) から、Borland の Delphi で記述された dll 内の関数を呼び出します。関数は機能しますが、呼び出しのたびに次のエラーが表示されます。「関数呼び出しで ESP の値が適切に保存されませんでした […]」。これは、呼び出し規約が間違っていることを意味します。私は Delphi を知りませんし、完全な dll コードも持っていませんが、これは Delphi 関数だと思います:
cの関連部分:
上記の c の __stdcall の代わりに、__cdecl と __fastcall を試しましたが、常に ESP メッセージが表示されます。また、Dephi 関数コードでは、関数は char* を返すように見えますが、dll ドキュメントには、「true」または「false」(?) を返すと書かれています。したがって、「typedef char * ...」の代わりにcで「typedef BOOL ...」を試しました:それでも、ESPメッセージが表示されます。「Basic Runtime Checks」の下でメッセージを抑制できることはわかっていますが (こちらを参照)、呼び出し構文を正しく取得したいと思います。dll は UPX で圧縮されていますが、関連性があるかどうかはわかりません (前述のとおり、機能自体は動作します)。
c - Cで異なる呼び出し規約で関数を定義できますか?
名前マングリングの後は次のようになります。
これは c で許可されていますか?そうでない場合、なぜですか?
c - C (C++ ではない) 値渡し/参照インタビューの質問
組み込みシステム プログラミングの C スキル候補を調査するために、私が聞きたい質問のリストがあります。私が持っている標準的な質問の 1 つで、多くの公開質問リストにも載っていますが、これは悪い質問だと思い始めています。
「C の値渡しと参照渡しを説明または対比する」
質問は C++ 参照とは何の関係もないことをインタビュー対象者に伝え、変数へのポインターと変数へのポインターの受け渡しの説明と、呼び出し先がポインターによって参照される変数を変更する方法を探しています。ポインターを構造体に渡すことがより効率的である方法についての説明のための追加のポイント。
ここで質問です: C には本当に「参照渡し」がありますか?
呼び出し先の署名によって、何が渡されるかが明確に定義されます。x または &x のいずれかを関数に渡して、コンパイラに何をすべきかを理解させることができるわけではありません。したがって、すべてがCであり、値渡しであり、参照渡しは実際にはポインターの値を渡すだけであると主張します。
根本的に違うところはありますか
対。
ありがとう、アンドリュー