⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_27434.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:27434 发表者:嵇山 发表日期:2003-01-11 17:13:27
<br>主题:真的是很奇怪的问题,难道是vc的bug.大家帮忙试一试
<br>内容:#include &lt;windows.h&gt;<BR>#include &lt;stdio.h&gt;<BR><BR>typedef unsigned char uchar;<BR>typedef unsigned short ushort;<BR>typedef unsigned long ulong;<BR>typedef struct {<BR>&nbsp;&nbsp; uchar Protocol[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Contains 0xFF,'SMB'*/<BR>&nbsp;&nbsp; uchar Command;&nbsp;&nbsp;&nbsp;&nbsp;/*Command Code*/<BR> union <BR> {<BR>&nbsp;&nbsp;struct<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp; uchar ErrorClass;&nbsp;&nbsp;&nbsp;&nbsp;/*Error Class*/<BR>&nbsp;&nbsp; uchar Reserved;&nbsp;&nbsp;&nbsp;&nbsp;/*Reserved for future use*/ <BR>&nbsp;&nbsp; ushort Error;&nbsp;&nbsp;&nbsp;&nbsp;/*Error Code*/<BR>&nbsp;&nbsp;} DosError;<BR>&nbsp;&nbsp;ulong Status;&nbsp;&nbsp;&nbsp;&nbsp;/*32-bits error code*/<BR> } Status ;<BR> uchar Flags;&nbsp;&nbsp;&nbsp;&nbsp;/*Flags*/<BR> ushort Flags2;&nbsp;&nbsp;&nbsp;&nbsp;/*More Flags*/<BR> union<BR> {<BR>&nbsp;&nbsp;uchar Pad[12];<BR>&nbsp;&nbsp;struct<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp; uchar PidHigh[2];&nbsp;&nbsp;&nbsp;&nbsp;/*High Part of the Pid*/<BR>&nbsp;&nbsp; uchar Unused[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Not Used*/<BR>&nbsp;&nbsp; uchar Unused2[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Not Used*/<BR>&nbsp;&nbsp;} Extra;<BR> } PadExtra;<BR> uchar Tid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Tree Identifier*/<BR> uchar Pid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Caller's process ID*/<BR> uchar Uid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Unauthenticated user ID*/<BR> uchar Mid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Multiplex Id*/<BR><BR>}SmbBaseHdr ;<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//SmbBaseHdr test;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",sizeof(SmbBaseHdr));<BR>}<BR><BR><BR><BR>我想结果应该是32,但是为什么是36呢.<BR>怪异
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 18:09:38
<br>内容:#include &lt;windows.h&gt;<BR>#include &lt;stdio.h&gt;<BR><BR>typedef unsigned char uchar;<BR>typedef unsigned short ushort;<BR>typedef unsigned long ulong;<BR>typedef struct {<BR>&nbsp;&nbsp; uchar Protocol[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Contains 0xFF,'SMB'*/<BR>&nbsp;&nbsp; uchar Command;&nbsp;&nbsp;&nbsp;&nbsp;/*Command Code*/<BR>union <BR>{<BR>&nbsp;&nbsp;uchar Flags;&nbsp;&nbsp;&nbsp;&nbsp;/*Flags*/<BR>&nbsp;&nbsp;ushort Flags2;&nbsp;&nbsp;&nbsp;&nbsp;/*More Flags*/<BR>&nbsp;&nbsp;struct<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp; uchar ErrorClass;&nbsp;&nbsp;&nbsp;&nbsp;/*Error Class*/<BR>&nbsp;&nbsp; uchar Reserved;&nbsp;&nbsp;&nbsp;&nbsp;/*Reserved for future use*/ <BR>&nbsp;&nbsp; ushort Error;&nbsp;&nbsp;&nbsp;&nbsp;/*Error Code*/<BR>&nbsp;&nbsp;} DosError;<BR>&nbsp;&nbsp;ulong Status;&nbsp;&nbsp;&nbsp;&nbsp;/*32-bits error code*/<BR>} Status ;<BR><BR>union<BR>{<BR>&nbsp;&nbsp;uchar Pad[12];<BR>&nbsp;&nbsp;struct<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp; uchar PidHigh[2];&nbsp;&nbsp;&nbsp;&nbsp;/*High Part of the Pid*/<BR>&nbsp;&nbsp; uchar Unused[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Not Used*/<BR>&nbsp;&nbsp; uchar Unused2[4];&nbsp;&nbsp;&nbsp;&nbsp;/*Not Used*/<BR>&nbsp;&nbsp;} Extra;<BR>} PadExtra;<BR>uchar Tid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Tree Identifier*/<BR>uchar Pid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Caller's process ID*/<BR>uchar Uid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Unauthenticated user ID*/<BR>uchar Mid[2];&nbsp;&nbsp;&nbsp;&nbsp;/*Multiplex Id*/<BR><BR>}SmbBaseHdr ;<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//SmbBaseHdr test;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",sizeof(SmbBaseHdr));<BR>}<BR><BR><BR>如果是这样的话,输出是32,<BR>就是把uchar Flags;&nbsp;&nbsp;&nbsp;&nbsp;/*Flags*/<BR>ushort Flags2;&nbsp;&nbsp;&nbsp;&nbsp;/*More Flags*/<BR>放到结构体的上面.<BR> 简直没有天理.<BR>晕了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:songxinye 回复日期:2003-01-11 18:39:32
<br>内容:结构体有对齐问题,你可以在VC的Setting的C/C++中Code Generation中看到,<BR>确省的是8,这是为了提高速度,让结构的起始地址为8的倍数。如果你改为1或2或4,<BR>你那两种情况就相同了,这种事情特别是混合语言编程时需要特别注意
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 18:53:55
<br>内容:谢谢songyas,<BR>但是我刚才改成1,或2,或4,编译时都有这个警告:<BR>test.cpp<BR>E:\myproject\test\test.cpp(4) : warning C4653: compiler option 'structure packing (/Zp)' inconsistent with precompiled header; current command-line option ignored<BR><BR><BR>然后结果还是不对<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-11 19:08:27
<br>内容:我试了以下,你的第一个结果32,程序如下,你设对齐为1
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 19:35:51
<br>内容:感激涕零<BR>谢谢<BR>鞠躬!<BR>太感谢了.<BR>谢谢songyas!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 19:46:56
<br>内容:songyas:<BR><BR>不好意思,麻烦你了,<BR>我用你的程序编译了一下,是可以的,<BR>但是我看我的和你的一样,但就是不能够.<BR>这是我的程序,如果你有空的话,帮我看看<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-11 19:57:44
<br>内容:我用你的也没问题
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 22:01:15
<br>内容:谢谢<BR>呵呵<BR>我都快晕了<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:嵇山 回复日期:2003-01-11 22:04:19
<br>内容:songyas:<BR>刚才机器重新启动了一下<BR>可以 <BR>谢谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -