免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
261 [报告]
发表于 2010-07-23 18:02 |只看该作者
回复  OwnWaterloo


    你连做人都没有学会,你代码在写的好也是一个垃圾啊,像你这样的,我估计没有 ...
baixueer2012 发表于 2010-07-23 17:56



{:3_186:}    较真才能写好程序啊!
也有人遇到问题,盖一下就混过去了,最后实在混不下去,草草收场,后面接手的人骂娘。

论坛徽章:
0
262 [报告]
发表于 2010-07-23 18:05 |只看该作者
楼主也真够愚昧的,哪得罪这种垃圾人了,让他这种垃圾喷,我都感觉到可笑,有技术不是显摆的,是做出来的, ...
baixueer2012 发表于 2010-07-23 18:01



    都是搞技术的,虽然他说话有气盛。但无仇无怨。你何若在UC上开骂呢?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
263 [报告]
发表于 2010-07-23 18:13 |只看该作者
提示: 该帖被管理员或版主屏蔽

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


    谢谢你,耐心的回复。
>>正式场合需要使用这种机制时, 我都是绕过语言特性, 用手工计算对齐和大小。

    这样的实现我还没看过,请问再后面增加的数组还是原来结构的一部分吗?可以用E规格的指针去引用确实是没错,不过他好像不属于原来结构的内部成员啊。
    还有新语言特性的出现,就是为了提高编程的效率,像你那样写的话,维护成本可能会高很多吧。 现在C++的标准里还没有柔性数组,如果是混合C和C++是不要使用最好。
   
>>细节问题确实还有。
    size_t 类型问题,因为很多平台上size_t类型就是用unsigned int 实现所以都没怎么注意,谢谢提醒。
    头文件问题,我是用vim写代码可是复制到外面很麻烦,所以还要开gedit复制出来,所以忘记了。
    ‘\0’ void*这些我在1楼的帖子里没看到。

再次感谢。。

论坛徽章:
0
265 [报告]
发表于 2010-07-23 18:16 |只看该作者
我也实验了一把,ubuntu, gcc 4.4.3

为什么 free(p) 就把之前的 malloc 的分配的所有空间释放了?还是没有真正释放?

如果没有,应该如何安全的释放所有空间?

用 valgrind 检查,free (p) 就够了。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
266 [报告]
发表于 2010-07-23 18:20 |只看该作者
baixueer2012
你rp真低啊..

论坛徽章:
0
267 [报告]
发表于 2010-07-23 18:25 |只看该作者
无视,继续盖楼。

根楼主一样,问这样的代码给价多少?{:3_186:}
  1. /*
  2. * flexiable-string-array.c - demo only
  3. *
  4. * Author: walte
  5. *
  6. * More information: http://is.gd/dDcRu
  7. *
  8. * History:
  9. *   2010-07-23 Initial version.
  10. */

  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>

  14. #define TEXT_HELLOWORLD "Hello World!"

  15. /* Log domain */
  16. #define LOG_TAG "fsa"

  17. /* Log utility */
  18. #ifndef LOG_TAG
  19. #define LOG_TAG "unknown"
  20. #endif

  21. #define LOG(level, msg) printf("%c/%s %s:%d %s\n", level, LOG_TAG, __FILE__, __LINE__, msg)

  22. #ifndef DEBUG
  23. #define LOGI(...)
  24. #define LOGD(...)
  25. #else
  26. #define LOGI(msg) LOG('I', msg)
  27. #define LOGD(msg) LOG('D', msg)
  28. #endif /* DEBUG */

  29. #define LOGE(msg) LOG('E', msg)

  30. #define MAX_DATA_LEN 256

  31. struct helloworld_t
  32. {
  33.     int  length;
  34.     char data[0];
  35. };

  36. struct helloworld_t * helloworld_new  (void *data, size_t length);
  37. void                  helloworld_free (struct helloworld_t *p);
  38. void                  helloworld_dump (struct helloworld_t *p);

  39. struct helloworld_t *
  40. helloworld_new (void *data, size_t length)
  41. {
  42.     struct helloworld_t *p = NULL;

  43.     if (data == NULL) {
  44.         return NULL;
  45.     }

  46.     p = (struct helloworld_t *) malloc(sizeof(struct helloworld_t) + length);

  47.     if (p == NULL) {
  48.         LOGE("Out of memory.");
  49.         return NULL;
  50.     }

  51.     LOGD ("New helloworld_t instance");

  52.     p->length = length;

  53.     memset (p->data, 0, length);
  54.     memcpy (p->data, data, length);

  55.     return p;
  56. }

  57. void
  58. helloworld_dump (struct helloworld_t *p)
  59. {
  60.     char buff[MAX_DATA_LEN + 1];
  61.     int len = 0;

  62.     if (p == NULL) {
  63.         return;
  64.     }

  65.     len = p->length > MAX_DATA_LEN ? MAX_DATA_LEN : p->length;
  66.     memcpy (buff, p->data, len);
  67.     buff[len] = '\0';

  68.     LOGD(buff);
  69. }

  70. void
  71. helloworld_free (struct helloworld_t *p)
  72. {
  73.     LOGD ("Free helloworld_t instance");

  74.     if (p == NULL) {
  75.         return;
  76.     }

  77.     /* FIXME: How to free the real data allocated by malloc? */
  78.     /* free ((void *) p->data); */
  79. #if 1
  80.     free (p);
  81. #endif
  82. }

  83. int main(int argc, char *argv[])
  84. {
  85.     struct helloworld_t *p = NULL;

  86.     p = helloworld_new (TEXT_HELLOWORLD, sizeof(TEXT_HELLOWORLD));
  87.     helloworld_dump (p);
  88.     helloworld_free (p);
  89.     p = NULL;

  90.     return 0;
  91. }

复制代码

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

------ ------
>> size_t
64位上int可能行不通, size_t比较保险。

------ ------
>> 头文件
这些其实都无关紧要, demo。
看见malloc, 懂的都知道要stdlib.h

------ ------
>> ‘\0’ void*这些我在1楼的帖子里没看到。
以他那种不愿承认错误的脾性, 估计早改了。

有错误或瑕疵, 可能是失误, 也可能是刻意的(比如让demo代码更短)
而刻意的举动造成的错误, 那就真的是理解有问题才发生的错误了。


------ ------
>> 请问再后面增加的数组还是原来结构的一部分吗?
>> 不过他好像不属于原来结构的内部成员啊

理论上说, 其实不是。
只是t和a在内存上是连续的, 可以通过t得到a的地址, 进而访问。

其实结构体也是一段连续内存, 各个成员在这段内存上有不同的偏移。
通过结构体地址, 加上各个偏移, 就可以得到各个成员的地址。
编译器会提供帮助, 可以按名字访问这些偏移。

------ ------
>> 还有新语言特性的出现,就是为了提高编程的效率,像你那样写的话,维护成本可能会高很多吧。

这是没办法的事。
有干干净活的, 也有干脏活的。

boost用起来爽吧? 开发效率高吧?
里面的实现比这个更龌鹾。
没办法, 要支持那么多编译器, 还要使用那么多C++特性, 就必须龌鹾点。

同理, 打算支持的平台越多, 代码越龌鹾也是不得已的事。

------ ------
>> 现在C++的标准里还没有柔性数组,如果是混合C和C++是不要使用最好。

这也是一个不使用柔性数组的理由。

论坛徽章:
0
269 [报告]
发表于 2010-07-23 18:42 |只看该作者
做结构体映射时,要注意结构体字节对齐问题。呵呵。我可犯过这个错误啊!

论坛徽章:
0
270 [报告]
发表于 2010-07-23 19:50 |只看该作者
以前有个新来的同事就喜欢研究C的这些技巧性的东西,
天天研究指针,哈希表啥的。
头头给他开了7000,指派给了一个项目经理,
项目经理出差,临行给了他一些交易的设计文档让他生成代码,
结果几天后项目经理回来,此君说还在研究设计文档。
后来被公司开了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP