游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11470|回复: 30

一个很糟糕的结构体

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-9-1 17:27:00 | 显示全部楼层 |阅读模式
看看下面这个结构体的定义.
就为了省4个字节,把结构体搞的看不明白.


  1. struct canvas
  2. {
  3.         int width;
  4.         int height;
  5.         int pitch;
  6.         int block_w;
  7.         int block_h;
  8.         canvas_block blocks[1];
  9. };
复制代码


说的就是blocks数组,表面看上去,是个只有1个元素的数组,而实际,他要存储N个canvas_block,即实际上要当指针用,
这是他的分配语句:
canvas* c = (canvas*)malloc(sizeof(canvas) - sizeof(canvas_block) + sizeof(canvas_block)*(nw*nh));


Q: 代码中为什么没有注释?
A: 因为云风已经尽可能的将代码写的简洁清晰,过于详尽的代码注释不是我的风格。

很违背他的"清晰"啊..
还有,所谓的"过于详尽的代码",实际上,他的代码里,没有一个字的注释..

还有,我认为,不是代码量少就等于简洁,
如果代码全凑在一起,该空行,不空行,该空格不空格,那这种代码就和糨糊一样,没有一点可读性。
变量的命名也一样,如果常常使用一个字母做变量名,看上去,整个代码很简洁,而实际上,就像是个逆向工程的代码,一眼看还上去极其不明朗,

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-9-1 17:37:00 | 显示全部楼层

Re:一个很糟糕的结构体

写代码就像写文章一样,
好的文章不但要机器可以看得懂,
人类读起来也很有感觉。
写文章像说话一样,
有些人喜欢把话说的玄乎其玄,看起来高深无比,新人和外行就喜欢这样的。
有些人喜欢把话说得简单易懂,看起来反倒像个傻比。
不过问题的关键是如果你打算使用malloc分配这个结构还有其他合适的写法吗??


50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-9-1 17:43:00 | 显示全部楼层

Re: Re:一个很糟糕的结构体

gantleman: Re:一个很糟糕的结构体

写代码就像写文章一样,
好的文章不但要机器可以看得懂,
人类读起来也很有感觉。
写文章像说话一样,
...


如果某人说话不够通俗,专业术语过多,搞的过于抽象,宽泛,我只会认为他还很年轻,不够聪明.
我认为一个能够用最通俗,最精练的语言让别人很快听懂的人,才是高明的,然而,也的确,这对人要求很高.

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-9-1 17:47:00 | 显示全部楼层

Re: Re: Re:一个很糟糕的结构体

不过问题的关键是如果你打算使用malloc分配这个结构还有其他合适的写法吗??

微无渊: Re: Re:一个很糟糕的结构体



如果某人说话不够通俗,专业术语过多,搞的过于抽象,宽泛,我只会认为他还很年轻,不够聪明.
我认为一个能够用最通俗,最精练的语言让别人很快听懂的人,才是高明的,然而,也的确,这对人要求很高.

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-9-1 17:55:00 | 显示全部楼层

Re: Re: Re: Re:一个很糟糕的结构体

gantleman: Re: Re: Re:一个很糟糕的结构体

不过问题的关键是如果你打算使用malloc分配这个结构还有其他合适的写法吗??


这代码不是我写的,

我要写的话,肯定是直接把blocks换成指针,即:
canvas_block* pBblocks;
然后malloc的时候,单独对他进行分配

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-9-1 18:17:00 | 显示全部楼层

Re: Re: Re: Re: Re:一个很糟糕的结构体

这个要分配的就是一块连续的内存地址,不能分配两块。
这个写法有风险,但C下面也只能这么写。
这种表述不清楚的地方,应该使用恰当的注释
微无渊: Re: Re: Re: Re:一个很糟糕的结构体



这代码不是我写的,

我要写的话,肯定是直接把blocks换成指针,即:
canvas_block* pBblocks;
然后malloc的时候,单独对他进行分配

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-9-1 18:31:00 | 显示全部楼层

Re:一个很糟糕的结构体

老的C程序员会这么写
canvas_block blocks[0];//======
看到0肯定会打个问号,然后去查为什么分配0个数组。
不知道为啥他要写成blocks[1]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-9-1 18:39:00 | 显示全部楼层

Re:一个很糟糕的结构体

主要是blocks这个定义存在歧义

100

主题

596

帖子

708

积分

高级会员

Rank: 4

积分
708
发表于 2012-9-1 19:52:00 | 显示全部楼层

Re:一个很糟糕的结构体

一般是指针再加个表示长度的变量。搞不懂究竟要干嘛

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
发表于 2012-9-1 22:15:00 | 显示全部楼层

Re:一个很糟糕的结构体

这个是为了在结构后面紧接着数组需要的内存。。。。。。

访问时,blocks[]下标最大可以为nw*nh - 1

便于内存管理吧。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-27 19:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表