问题标签 [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 不是一个真正的函数?
例如,如果你这样写:
您可能会得到如下输出:
当你深入研究汇编代码时,你会发现这样的东西:
所以,编译器直接把常量“4”作为printf add 调用它的参数。那么 sizeof 是做什么的呢?
c - 为什么我不能在预处理条件下使用 sizeof?
我知道 sizeof 是一个运算符,它在编译时被评估为一个整数常量。但它似乎不能在 #if 预处理器指令中使用,例如:
(cygwin-gcc 3.4.4 以及 Visual C++ 6.0 报告编译错误)
为什么不允许这样的使用?
c++ - 空的大小是多少?
这个陈述会产生什么?
编辑:问题的扩展。
如果 sizeof(void) 在 GCC 编译器中产生 1,则分配 1 个字节的内存并且指针 p 指向该字节并且 p++ 会递增到 0x2346?假设 p 是 0x2345。我说的是 p 而不是 *p。
c - 我在以下程序中缺少什么?
为什么for循环一次都不运行?
c - 如何捕获 sizeof(#define) 形式的错误
我敢肯定有时在 C 中使用 sizeof() a #define 是有充分理由的,但我偶尔会遇到有人使用 sizeof() a #define 而不是 sizeof() 结构的错误(在我的代码库我不需要使用 sizeof() 一个#define)。
例如(做作,但希望能说明这一点):
有什么简单、自动化的方法来捕捉这个吗?
谢谢你的帮助。尼克B
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 不是字符。
非常感谢大家的帮助 =)
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。
c++ - C++ 在预处理器#if 中的 sizeof() 比较时抛出编译错误
我有这个编译时出现的错误“致命错误 C1017:无效的整数常量表达式”来自 Visual Studio。我该怎么做?
c++ - 为什么我不能对另一个类的静态 char[] 执行 sizeof?
为什么下面的代码会产生编译错误?
编辑:我的原始代码不清楚-我已将代码拆分为单独的文件...
第一.h
第一个.cpp
确定First
班级内的大小似乎很好,但是......
第二个.h
第二个.cpp
我收到以下错误:'const char *[]': illegal sizeof operand
c++ - 模板函数如何“知道”作为模板参数给出的数组的大小?
在下面的 C++ 代码中,模板化的 Check 函数给出的输出不是我想要的:它是 1 而不是 3。我怀疑 K 被映射到int*
,而不是int[3]
(这是一种类型吗?)。我希望它给我与第二个(非模板化)函数相同的输出,我明确给出了数组的大小......
没有使用宏,有没有办法编写一个接受单个参数但仍然知道数组大小的 Check 函数?
谢谢。
PS:在实际代码中,数组是一个结构数组,必须对其进行迭代以进行单元测试。