問題タブ [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.

0 投票する
9 に答える
3244 参照

c++ - C / C ++でのsizeof()のメカニズムは何ですか?

sizeofは実際の関数ではないようですか?

たとえば、次のように記述した場合:

次のような出力が得られる場合があります。

そして、アセンブルコードを掘り下げると、次のようなsthが見つかります。

したがって、コンパイラは、printf addのパラメータがそれを呼び出すときに、定数「4」を直接配置します。では、sizeofは何をするのでしょうか?

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

c - プリプロセッサ状態でsizeofを使用できないのはなぜですか?

sizeofは演算子であり、コンパイル時に整数定数に評価されることを理解しています。ただし、次のような#ifプリプロセッサディレクティブでは使用できないようです。

(cygwin-gcc3.4.4およびVisualC ++ 6.0はコンパイルエラーを報告します)

なぜそのような使用は許可されないのですか?

0 投票する
10 に答える
78008 参照

c++ - 空隙の大きさは?

このステートメントは何をもたらすでしょうか?


編集:質問の延長。

GCC コンパイラで sizeof(void) が 1 を返す場合、1 バイトのメモリが割り当てられ、ポインタ p はそのバイトを指し、p++ は 0x2346 にインクリメントされますか? p が 0x2345 であるとします。*p ではなく、p について話しているのです。

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

c - 次のプログラムには何が欠けていますか?

forループが一度も実行されないのはなぜですか?

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

c - sizeof(#define) 形式のバグをキャッチする方法

C で sizeof() を #define にする正当な理由がある場合もあると思いますが、sizeof() を構造体 (および私のsizeof() を #define にする必要はありません)。

例(不自然ですが、うまくいけば要点を示しています):

これをキャッチする簡単で自動化された方法はありますか?

助けてくれてありがとう。ニックB

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

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 は文字ではありません。

みんなの助けに感謝します=)

0 投票する
4 に答える
655 参照

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 です。

0 投票する
10 に答える
5091 参照

c++ - プリプロセッサのsizeof()比較でC ++がコンパイルエラーをスローする#if

これは、Visual Studio からの「致命的なエラー C1017: 無効な整数定数式」というエラーでコンパイルされません。どうすればいいですか?

0 投票する
4 に答える
4006 参照

c++ - 別のクラスの static char[] に対して sizeof を実行できないのはなぜですか?

次のコードでコンパイル エラーが発生するのはなぜですか?


編集:元のコードが明確ではありませんでした-コードを別々のファイルに分割しました...


ファースト.h

First.cpp

Firstクラス内でサイズを決定するのは問題ないようですが...

Second.h

Second.cpp

次のエラーが表示されます。'const char *[]': illegal sizeof operand

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

c++ - テンプレート関数は、テンプレート引数として指定された配列のサイズをどのように「知る」ことができますか?

以下の C++ コードでは、テンプレート化された Check 関数は、私が望んでいたものとは異なる出力を提供します: 3 ではなく 1int*ですint[3]。配列のサイズを明示的に指定する2番目の(テンプレート化されていない)関数と同じ出力を提供したいと思います...

マクロを使用する以外に、単一の引数を受け取り、配列のサイズを認識している Check 関数を作成する方法はありますか?

ありがとう。

PS: 実際のコードでは、配列は単体テストのために反復する必要がある構造体の配列です。