问题标签 [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 不是一个真正的函数?

例如,如果你这样写:

您可能会得到如下输出:

当你深入研究汇编代码时,你会发现这样的东西:

所以,编译器直接把常量“4”作为printf add 调用它的参数。那么 sizeof 是做什么的呢?

0 投票
2 回答
5923 浏览

c - 为什么我不能在预处理条件下使用 sizeof?

我知道 sizeof 是一个运算符,它在编译时被评估为一个整数常量。但它似乎不能在 #if 预处理器指令中使用,例如:

(cygwin-gcc 3.4.4 以及 Visual C++ 6.0 报告编译错误)

为什么不允许这样的使用?

0 投票
10 回答
78008 浏览

c++ - 空的大小是多少?

这个陈述会产生什么?


编辑:问题的扩展。

如果 sizeof(void) 在 GCC 编译器中产生 1,则分配 1 个字节的内存并且指针 p 指向该字节并且 p++ 会递增到 0x2346?假设 p 是 0x2345。我说的是 p 而不是 *p。

0 投票
5 回答
256 浏览

c - 我在以下程序中缺少什么?

为什么for循环一次都不运行?

0 投票
2 回答
667 浏览

c - 如何捕获 sizeof(#define) 形式的错误

我敢肯定有时在 C 中使用 sizeof() a #define 是有充分理由的,但我偶尔会遇到有人使用 sizeof() a #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() failed");

msgRcvBuffer[recvMsgSize] = '\0';

字符串 msgType(msgRcvBuffer);

cout << "消息类型" << msgType << endl; <<<<<< 打印时什么都不显示

void handleReg(字符串消息,int 套接字,字符串 ipAddr){

出于某种原因,我的消息字符串只是 1... =S 我想要做的只是从客户端发送的消息中获取消息。我只是想从缓冲区的开头删除“1”和“0”。1 和 0 不是字符。

非常感谢大家的帮助 =)

0 投票
4 回答
655 浏览

c++ - MSVC:哪些编译器开关会影响结构的大小?

我有两个分别编译的 DLL,一个是从 Visual Studio 2008 编译的,一个是从 matlab 编译的 mex 文件。
两个 DLL 都有一个包含的头文件。当我sizeof()在一个 DLL 中获取结构时,它返回 48,在另一个 DLL 中返回 64。我检查了/Zp开关,并且在两个编译中它都设置为/Zp8.
还有哪些其他编译器开关可能会影响结构的大小?
该结构是一个简单的 POCO,没有继承,也没有虚函数。


编辑

该结构如下所示:

在调试中它sizeof()在两种情况下都返回 56,在发布中,在 mex 编译中它是 48,从 VS 它是 64。
我可以告诉 matlab 在编译 mex 时要使用的确切编译器选项,所以它不是。


编辑

用offsetof检查后发现差异在于std::vector. 在一个 dll 中是 32,在另一个中是 48。
两个 dll 都是 x64。

0 投票
10 回答
5091 浏览

c++ - C++ 在预处理器#if 中的 sizeof() 比较时抛出编译错误

我有这个编译时出现的错误“致命错误 C1017:无效的整数常量表达式”来自 Visual Studio。我该怎么做?

0 投票
4 回答
4006 浏览

c++ - 为什么我不能对另一个类的静态 char[] 执行 sizeof?

为什么下面的代码会产生编译错误?


编辑:我的原始代码不清楚-我已将代码拆分为单独的文件...


第一.h

第一个.cpp

确定First班级内的大小似乎很好,但是......

第二个.h

第二个.cpp

我收到以下错误:'const char *[]': illegal sizeof operand

0 投票
1 回答
2017 浏览

c++ - 模板函数如何“知道”作为模板参数给出的数组的大小?

在下面的 C++ 代码中,模板化的 Check 函数给出的输出不是我想要的:它是 1 而不是 3。我怀疑 K 被映射到int*,而不是int[3](这是一种类型吗?)。我希望它给我与第二个(非模板化)函数相同的输出,我明确给出了数组的大小......

没有使用宏,有没有办法编写一个接受单个参数但仍然知道数组大小的 Check 函数?

谢谢。

PS:在实际代码中,数组是一个结构数组,必须对其进行迭代以进行单元测试。