免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhangsuozhu
打印 上一主题 下一主题

求高手给个价,能写这样代码的程序员月薪应该给多少? [复制链接]

论坛徽章:
2
戌狗
日期:2013-11-06 17:35:36寅虎
日期:2014-10-20 23:12:29
251 [报告]
发表于 2010-07-23 17:19 |只看该作者
回复 245# OwnWaterloo


    你好!向你请教一下,柔性数组,实际的应用当中会在哪些方面比较多。 像我下面这样使用是否合理。

  1. struct helloworld_t
  2. {
  3.         int num;
  4.         char extend[];
  5. };
  6. int
  7. main ( int argc, char *argv[] )
  8. {
  9.         unsigned int or_size, ex_size;
  10.         struct helloworld_t *p;

  11.         or_size = sizeof(struct helloworld_t);
  12.         ex_size = sizeof("hello world\n");
  13.        

  14.         p = (struct helloworld_t*)malloc(or_size + ex_size);

  15.         p->num = 10;
  16.         memcpy(p->extend, "hello world\n", ex_size);
  17.        
  18.        
  19.         while( p->num -- )
  20.                 printf("%s", p->extend);

  21.         free(p);
  22.         p = NULL;

  23.         return EXIT_SUCCESS;
  24. }
复制代码
多说一句,如果面试当中那样应用随手写应该是可以的吧,因为他一定也知道,大部分的机器是32位的,小端结构。

论坛徽章:
0
252 [报告]
发表于 2010-07-23 17:23 |只看该作者
上面把很多问题改了。唯一没改的是鹿兄说的。把hello world!\n定义成宏。呵呵

论坛徽章:
2
戌狗
日期:2013-11-06 17:35:36寅虎
日期:2014-10-20 23:12:29
253 [报告]
发表于 2010-07-23 17:35 |只看该作者
回复 253# zhangsuozhu


    我是很想了解,柔性数组在实际当中的作用以及,怎样有效的使用。 printf格式化输出变量确实会有隐患,我没写过商业(或专业)代码,谢谢提醒。

论坛徽章:
0
254 [报告]
发表于 2010-07-23 17:41 |只看该作者
  1. /** struct ip_options - IP Options
  2. *
  3. * @faddr - Saved first hop address
  4. * @is_data - Options in __data, rather than skb
  5. * @is_strictroute - Strict source route
  6. * @srr_is_hit - Packet destination addr was our one
  7. * @is_changed - IP checksum more not valid
  8. * @rr_needaddr - Need to record addr of outgoing dev
  9. * @ts_needtime - Need to record timestamp
  10. * @ts_needaddr - Need to record addr of outgoing dev
  11. */
  12. struct ip_options {
  13.         __be32                faddr;
  14.         unsigned char        optlen;
  15.         unsigned char        srr;
  16.         unsigned char        rr;
  17.         unsigned char        ts;
  18.         unsigned char        is_strictroute:1,
  19.                         srr_is_hit:1,
  20.                         is_changed:1,
  21.                         rr_needaddr:1,
  22.                         ts_needtime:1,
  23.                         ts_needaddr:1;
  24.         unsigned char        router_alert;
  25.         unsigned char        cipso;
  26.         unsigned char        __pad2;
  27.         unsigned char        __data[0];
  28. };
复制代码
协议上用的比较多

论坛徽章:
0
255 [报告]
发表于 2010-07-23 17:44 |只看该作者
刚才和一个小姑娘聊天,87年的,工作半年,用php,工资5k多。唉,什么个世道。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
256 [报告]
发表于 2010-07-23 17:47 |只看该作者
回复 252# peijue

>> 实际的应用当中会在哪些方面比较多

这个我也不清楚。似乎都是附加一个char数组作为字符串?
基本上正式场合里我没用过柔性数组。

特性使用得越多, 对编译器要求也更苛刻。
比如, vc直到10都不支持这东西。


正式场合需要使用这种机制时, 我都是绕过语言特性, 用手工计算对齐和大小。
比如结构类型是T, 想要附加的元素类型是E:

  1. // 结构类型
  2. typedef struct { ... } T;

  3. // 将结构大小向上圆整到alignof(E)
  4. size_t off = ceiling( sizeof(T), alignof(E) );

  5. // 一个T的对象
  6. T* t = (T*)malloc( off + n*sizeof(E) );
  7. // 尾部附加一个E的数组, 维度为n
  8. E* a = (E*)((char*)t + off);
复制代码
alignof已经被加入C1x标准草稿。
在那之前, alignof也被一些编译器支持。
gcc是 __alignof__(比C1x的alignof功能还强一些)
vc从8开始, 有 __alignof。

如果编译器不支持, 可以这样计算:

  1. typedef struct {
  2.       char c;
  3.       E    v;
  4. } S;
  5. enum { alignof_E = offsetof(S, v) };
复制代码
向上圆整ceiling可以这样实现:

  1. int is_power_of_2(size_t x)
  2. { return x!=0 && ( x & (x-1) )==0 ; }

  3. size_t ceiling(size_t x, size_t n)
  4. { assert(is_power_of_2(n); return (x+n-1)&(~(n-1); }
复制代码
这样做其实还有一个bonus: 可以不仅仅在尾部附加数组。
因为这其实不是柔性数组了, 而是运行时构造一个结构体。


这样做的好处上面也说了: 只要不是太烂的编译器, 都能实现。
坏处就是编程太复杂。
如果决定只使用gcc, 那直接用柔性数组比较好。


---------------------------------
>> 像我下面这样使用是否合理

这代码没什么问题

-------------------------------------------
>> 多说一句,如果面试当中那样应用随手写应该是可以的吧,因为他一定也知道,大部分的机器是32位的,小端结构。

所以关于大小端, 我一开始就没计较。
你的代码中没有包含适当头文件我不也没说什么。
这可能是手误。

sizeof的结果是size_t类型, 但unsigned也足够存储hello_world_t这样的结构体的大小。
所以也无关紧要。

前面的那些帖, 仅仅是针对字符串字面值追加了0, 还有不必要的void*转换。
"刻意追加"一个0, "多写"一个(void*), 这肯定不是手误, 而是有意识这么做。
这就能反映问题, 写代码的人确实不懂。

论坛徽章:
0
257 [报告]
发表于 2010-07-23 17:53 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
0
258 [报告]
发表于 2010-07-23 17:56 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
0
259 [报告]
发表于 2010-07-23 17:57 |只看该作者
{:3_182:}和我无关啊~~~

论坛徽章:
0
260 [报告]
发表于 2010-07-23 18:01 |只看该作者
提示: 该帖被管理员或版主屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP