7
596
4216
中级工程师
使用特权
2
1125
4514
禁止发言
1
9
280
中级技术员
47
1437
助理工程师
266
2597
8855
技术达人
23
819
2598
初级工程师
你的老师没教过你用C语言怎么实现包装? 人和人就差那么一点。不是做不到,而是想不到。 那位优胜者是用C51实现的。就他一个人想到了?我自愧不如。甘愿被淘汰。 他写的形式是: ( ... )A = (... )B; 不知HWM 的“C无法实现”的论断,有何感想?
0
267
813
高级技术员
24
1438
5210
高级工程师
8
137
418
资深技术员
如果一帧数据是一幅图像,程序上按字节处理?即使DMA已经到了链路层。 wxj1952 发表于 2008-3-22 21:49
6
实习生
159
1万
5万
版主
21
800
2792
4820
资深工程师
关于下面程序的分析 typedef struct { int A[10]; } struct_A; int A1[10], A2[10]; int main( void ) { ... *(struct_A*)A2 = *(struct_A*)A1; ... while ( 1 ) ; } 一,首先分析一下数组定义 int A1[10]; 上面定义了一个类型为int的变量序列A1[0]...A1[9],和一个指向类型int的常数指针A1。所以数组并非是一个完整的数据类型。 二,再考察一下赋值符“=” y = x; 上面是很普通的一条赋值语句,其中赋值符的缺省语义(注意这里的“缺省”两字)是把变量x的值按其“类型”和“原顺序”复制到变量y上。要注意的两点是:其一无论变量的类型有多大多复杂都可以复制,只要是这个类型存在;其二x和y的类型不要求完全一致,只要符合“包容”关系。 有了这两条就不难分析上叙程序的含义了。 首先看(struct_A*)A2和(struct_A*)A1,这叫“指鹿为马”,将原本指向类型int的指针强行指向类型struct_A。然后可以看到再在其基础上去指定一个类型为struct_A的变量——*(struct_A*)A2和*(struct_A*)A1。这样一来再用赋值语句去复制此变量的内容就顺理成章了。 现在再从另一角度来看一下上面的程序,发现可用三个词来概括就是: 1,指鹿为马,前面已经看到了。 2,漏馅封装,一眼就能看出,太明显了。 3,软件冗余,在硬件上冗余是件好事,可到了软件事情就不是这样了。当然可用#define N 10来消除,但还是碍眼。 C能发展到今天其实可以归功于两类人,一类是将C和UNIX捆绑的那些专家,另一类就是那些专门玩玄的玩家。正因为有这些专家,使得C在各个领域(特别是开源领域)有了充分的应用;而也因为有了这些玩家,使得C能被更广泛的流传,现已变成了最为流行的编程语言。 HWM 发表于 2008-3-21 11:30
96
430
1946
19
1222
4552
366
2058
153
474
39
286
2107
27
81
初级技术员
发表回复 本版积分规则 回帖后跳转到最后一页
等级类勋章
人才类勋章
发帖类勋章
时间类勋章
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号