問題タブ [sizeof]
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++ - C / C ++でのsizeof()のメカニズムは何ですか?
sizeofは実際の関数ではないようですか?
たとえば、次のように記述した場合:
次のような出力が得られる場合があります。
そして、アセンブルコードを掘り下げると、次のようなsthが見つかります。
したがって、コンパイラは、printf addのパラメータがそれを呼び出すときに、定数「4」を直接配置します。では、sizeofは何をするのでしょうか?
c - プリプロセッサ状態でsizeofを使用できないのはなぜですか?
sizeofは演算子であり、コンパイル時に整数定数に評価されることを理解しています。ただし、次のような#ifプリプロセッサディレクティブでは使用できないようです。
(cygwin-gcc3.4.4およびVisualC ++ 6.0はコンパイルエラーを報告します)
なぜそのような使用は許可されないのですか?
c++ - 空隙の大きさは?
このステートメントは何をもたらすでしょうか?
編集:質問の延長。
GCC コンパイラで sizeof(void) が 1 を返す場合、1 バイトのメモリが割り当てられ、ポインタ p はそのバイトを指し、p++ は 0x2346 にインクリメントされますか? p が 0x2345 であるとします。*p ではなく、p について話しているのです。
c - 次のプログラムには何が欠けていますか?
forループが一度も実行されないのはなぜですか?
c - sizeof(#define) 形式のバグをキャッチする方法
C で sizeof() を #define にする正当な理由がある場合もあると思いますが、sizeof() を構造体 (および私のsizeof() を #define にする必要はありません)。
例(不自然ですが、うまくいけば要点を示しています):
これをキャッチする簡単で自動化された方法はありますか?
助けてくれてありがとう。ニックB
c++ - バッファに要素が含まれていますが、印刷されていません
前回の投稿をスクラッチして申し訳ありません。遅くなりました =S しかし、基本的に、作成したバッファの送信に問題があります。私がどこで間違っているのかを知る必要があるだけです =( またはもっと良い方法があるかどうか。
------ クライアント送信ユーザー名 -------
----------- サーバー (受信側)------------ char msgRcvBuffer[RCVBUFSIZE];
int recvMsgSize;
if ((recvMsgSize = recv(clntSocket, msgRcvBuffer, RCVBUFSIZE, 0)) < 0) DieWithError("recv() 失敗");
msgRcvBuffer[recvMsgSize] = '\0';
string msgType( msgRcvBuffer );
cout << "メッセージ タイプ" << msgType << endl; <<<<<< 印刷しても何も表示されない
void handleReg(文字列メッセージ、int ソケット、文字列 ipAddr) {
何らかの理由で、私のメッセージ文字列はただ 1 です... =S 私がやろうとしているのは、クライアントから送信されたものからメッセージを取得することです。バッファの先頭から「1」と「0」を削除しようとしています。1 と 0 は文字ではありません。
みんなの助けに感謝します=)
c++ - MSVC: 構造体のサイズに影響するコンパイラ スイッチは何ですか?
2 つの DLL を別々にコンパイルしました。1 つは Visual Studio 2008 からコンパイルされたもので、もう 1 つは matlab からコンパイルされた mex ファイルです。
どちらの DLL にも、インクルードするヘッダー ファイルがあります。1 つの DLL で構造体を取得するsizeof()
と、48 が返され、もう 1 つの DLL では 64 が返されます。/Zp
スイッチを確認したところ、両方のコンパイルで に設定されてい/Zp8
ます。
構造体のサイズに影響を与える可能性のある他のコンパイラ スイッチは何ですか?
構造体は、継承も仮想関数もない単純な POCO です。
編集
構造体は次のようになります。
デバッグでsizeof()
はどちらの場合も 56 を返します。リリースでは、mex コンパイルでは 48、VS では 64
です。mex をコンパイルするときに使用する正確なコンパイラ オプションを matlab に伝えることができるので、そうではありません。
編集
offsetof で確認したところ、違いは のサイズにあることがわかりましたstd::vector
。1 つの DLL では 32 で、もう 1 つの DLL では 48
です。どちらの DLL も x64 です。
c++ - プリプロセッサのsizeof()比較でC ++がコンパイルエラーをスローする#if
これは、Visual Studio からの「致命的なエラー C1017: 無効な整数定数式」というエラーでコンパイルされません。どうすればいいですか?
c++ - 別のクラスの static char[] に対して sizeof を実行できないのはなぜですか?
次のコードでコンパイル エラーが発生するのはなぜですか?
編集:元のコードが明確ではありませんでした-コードを別々のファイルに分割しました...
ファースト.h
First.cpp
First
クラス内でサイズを決定するのは問題ないようですが...
Second.h
Second.cpp
次のエラーが表示されます。'const char *[]': illegal sizeof operand
c++ - テンプレート関数は、テンプレート引数として指定された配列のサイズをどのように「知る」ことができますか?
以下の C++ コードでは、テンプレート化された Check 関数は、私が望んでいたものとは異なる出力を提供します: 3 ではなく 1int*
ですint[3]
。配列のサイズを明示的に指定する2番目の(テンプレート化されていない)関数と同じ出力を提供したいと思います...
マクロを使用する以外に、単一の引数を受け取り、配列のサイズを認識している Check 関数を作成する方法はありますか?
ありがとう。
PS: 実際のコードでは、配列は単体テストのために反復する必要がある構造体の配列です。