|
![]() | 作者: group [group]
![]() |
登录 |
作 者 QoQ (笑啊笑,笑出泪) 讨 论 区 Programming [●] 标 题 C语言的两个问题 发信站 锦城驿站 (2001年08月23日 星期四 06:50:01) 1. int n; if( 10 == n ) //第一种判断 if( n == 10 ) //第二种判断 以上两种判断那个更好?为什么? 2. typedef{ char ch1; char ch2; int n; }stru; 和 typedef { char ch1; int n; char ch2; }stru; 的sizeof(stru)的值为什么不同? 作 者 QoQ (笑啊笑,笑出泪) 讨 论 区 Programming [●] 标 题 C语言的两个问题- 答案一 发信站 锦城驿站 (2001年08月23日 星期四 06:54:31) 答案一:习惯上是第一个更好,相同的cmp指令, 这两种判断是一样的,编译器会自己做优化识别 答案二:我喜欢第一种写法,因为这样当不小心把==写成=时 就会产生一个编译错误,如果是第二种写法,则只是 一个警告,常常注意不到。 一般建议使用( 10 == n )这种判断 作 者 QoQ (笑啊笑,笑出泪) 讨 论 区 Programming [●] 标 题 C语言的两个问题- 答案二 发信站 锦城驿站 (2001年08月23日 星期四 07:00:00) 答案一:这是由于编译器的内存边界对其的结果,char型可以在内存任何位置, short型要在偶数边界对齐,int型在4整除的边界对齐,而且最后的结 构大小为最大除数的整数倍。所以第一个结构应该是8bytes,第二 个结构应该是12bytes 答案二:编译器的结构体对齐方式可以用#pragma push/pop 修改的, 答案一说的是缺省的情况吧? 引申一: #pragma pack(1) struct myarphdr { }; #pragma pack() 可以自己调整的。 不过一般来说,取消优化对齐,对于SPARC芯片,性能损失比较大 引申二:在VC编程中可以用#include <一个文件>来解决字节对齐问题。 有1字节、2字节、4字节、8字节、16字节对齐。 默认的是8字节对齐。 如果我们在这个结构用两个#include包起来,声明为1字节对齐, 大小就一样了。 那个文件我忘记了,但是核心内容就是#pragma pack(1). 那个文件在c++builder 和bland c++里也可以用。 回答引申二:你说的是 #include <pshpack1.h> 不过在VC里是可以在IDE里自己调整选项的。 C++ Builder不清楚,应该也可以吧。 |
地主 发表时间: 04/01 04:21 |
![]() | 回复: cimsxiyang [cimsxiyang] ![]() |
登录 |
引申二,我没有理解。 |
B1层 发表时间: 04/01 21:36 |
![]() | 回复: TomyChen [tomychen] ![]() |
登录 |
哈,我也是引申二,没看明白 |
B2层 发表时间: 04/02 08:19 |
![]() | 回复: tysx [tysx] ![]() |
登录 |
我不怎么明白 |
B3层 发表时间: 04/05 00:41 |
![]() | 回复: group [group] ![]() |
登录 |
我不懂C,看到可能有意思就转过来了,哪位高手指点下 |
B4层 发表时间: 04/05 02:32 |
![]() | 回复: tysx [tysx] ![]() |
登录 |
兄弟倒是学过,一看这才知道还是水平太低。 |
B5层 发表时间: 04/05 04:43 |
![]() | 回复: nightcolor [nightcolor] ![]() |
登录 |
if (男人=好人) if (好人=男人) bec~=????? |
B6层 发表时间: 04/06 16:10 |
![]() | 回复: tysx [tysx] ![]() |
登录 |
这我觉得不是c语言 |
B7层 发表时间: 04/06 17:52 |
![]() | 回复: group [group] ![]() |
登录 |
我对分号敏感 |
B8层 发表时间: 04/06 20:29 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号