论坛: 编程破解 标题: C语言的两个问题(推荐) 复制本贴地址    
作者: 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号