Gamepad & WSN

Tag Archives: 程序设计

混淆的c语言知识点:sizeof关键字

Author:Gamepader    IN:碎碎念    Tags: ,     评论: 0    超过41人围观

首先申明:sizeof是32个c语言关键字中的一个,它是关键字,不是函数!
下列测试基于以下平台:
Windows7,P3处理器(32bit),编译器:

1
2
3
4
5
6
7
8
9
10
11
12
$ gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --ver
bose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libe
xecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-langu
ages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --
enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-
awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-thre
ads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptio
ns --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)

example 1:

    1
    2
    void *p = NULL;
    printf("void *p = NULL;\tsizeof(p)=%d",sizeof(p));

    输出为:void *p = NULL; sizeof(p)=4

    1
    2
    int *p = NULL;
    printf("int *p = NULL;\tsizeof(p)=%d",sizeof(p));

    输出为:int *p = NULL; sizeof(p)=4

example 2:

    1
    2
    3
    4
    5
    int a[100];
    printf("int a[100];\tsizeof(a)=%d\n",sizeof(a));
    printf("int a[100];\tsizeof(a[100])=%d\n",sizeof(a[100]));
    printf("int a[100];\tsizeof(&a)=%d\n",sizeof(&a));
    printf("int a[100];\tsizeof(&a[0])=%d\n",sizeof(&a[0]));

    输出为:
    int a[100]; sizeof(a)=400
    int a[100]; sizeof(a[100])=4
    int a[100]; sizeof(&a)=4
    int a[100]; sizeof(&a[0])=4

example 3:

    1
    2
    3
    int i = -20;
    unsigned j = 10;
    printf("i+j=%d",i+j);

    输出为:
    i+j=-10

example 4:

    const volatile value表示不应修改value的值,但是value的值可能随时会被外部(如:硬件)修改。
    volatile标识一个变量意味着这个变量可能被非本程序的其他过程改变,例如某个访问这一变量的某中断程序。为变量加上这一标识可以禁止编译器的优化,使程序正确地按设计者的意图运行。
    如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了。
01-30
2013

C语言中宏定义的一个特殊用法

Author:Gamepader    IN:ARM_Linux    Tags: ,     评论: 0    超过49人围观

在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:

1
2
3
#ifdef DEBUG
调试代码
#endif

如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef和#endif就很麻烦了。我们可以定义一个DbgPrintf的函数来专门处理这些事情,只在DbgPrintf函数内放上#ifdef和#endif就行了。但是这样代码在运行时,还是有调用一次函数的,浪费了时间。那么可不可以利用宏定义,实现完全没有编译代码产生的宏呢?
可以尝试下面的宏代码:

1
2
3
4
5
6
#ifdef DEBUG
#define DbgPrintf printf
#else
#define DbgPrintf /\
/DbgPrintf

#endif

如果DEBUG已经定义了,那么不用说,当然是用printf去代替DbgPrintf了。
下面只分析DEBUG未定义的情形,这个宏定义实际上是将“DbgPrintf”定义成了“//DbgPrintf”,由于续行符的作用,#define定义时不会发现注释符“//”,但是在展开到代码之后,就成了注释符“//”了,也就是说,如果你原来的代码是DbgPrintf("%d",x);,经过这个宏展开后成了//DbgPrintf("%d",x);,相当于自动在前面加了注释符“//”。要注意的是,续行符后面的“/”一定要顶格写,否则就不是“//”了。另外,这个宏只能单独一行使用,因为它将该行后面的代码都注释掉了。
(转载自computer00)

01-30
2013

程序员的工作环境与效率(转)

Author:Gamepader    IN:碎碎念    Tags: ,     评论: 0    超过38人围观

很赞同《Joel on Software》中Bionic Office一文所说,办公环境需要比大部分员工的家中环境更舒适。否则老板只能招聘哪些还住在简陋公寓的员工,他们才有可能下班后情愿留在办公室继续工作。

我认为程序员的办公环境的几个条件:

  • 1、足够大的桌面空间

程序员的办公桌最好可以并排坐下2人,以便pair programming或者code review。在不离开座位的情况下,有足够空间用白板或者纸面展开讨论问题。协作的同事不必站在身后费力的越过肩膀来看屏幕上的内容。桌面可以放下2个显示器并可以随手拿到常用的参考资料及书籍,有合适的文件柜或壁柜存放归档的资料,避免桌面上堆满了各种打印的资料。

  • 2、电脑环境

工作的机器有足够的内存,比如8G,这样并行打开复杂的workspace时候不需要关闭邮件或者浏览器软件,也避免在debug模式时硬盘在拼命swap以腾出空余内存。
办公环境有足够的带宽,访问Google的服务没有障碍。内部资源如测试服务器、邮件服务器、SVN访问要非常快。

  • 3、座位距离

多人的team中尽量能让所有工位之间行走距离最短,避免坐在对面的两个员工需要绕一大圈才能到达对方电脑前。

  • 4、其他环境

温度及空气状况,办公室不要过冷或者过热。空气质量清新,不要有明显噪音,比如来自空调、日光灯、服务器等噪音。

  • 其他一些可选条件

程序员最好有两个显示器,或建议1台式机+1笔记本,可以极大提高开发效率
有合适的、方便更新的公告栏
有公共休闲区,比如一些游戏区域,方便互相交流,发散讨论
Joel推崇的Aeron电脑椅
陈旧的办公环境会让面试者或者来访客户印象不佳,办公环境最好有定期维护保养并适当淘汰旧的设备。发暗的地毯、电脑椅上擦不掉的污渍,偏小的电脑屏幕、油光发亮的键盘都会让求职者印象不佳。
有合适的参考图书库,可以找到常用资料
有合适的咖啡、碳酸饮料、零食

顺便吐槽一下现在的一些中小型企业,老旧的办公室;电源每天能跳几次闸;办公椅得提心吊胆的坐,绝对不能坐得太安稳:否则要么是椅子弄得缺胳膊少腿,要么是人摔得缺胳膊少腿;办公桌可以直接点亮用手拿着的小LED,还不用接电线,估计电死老鼠等小动物没有任何鸭梨;冬天下雪空调开的那温度,风吹到脸上那感觉,我宁可站在走廊上;好了,吐槽完毕,继续折腾我的USB下位机代码……

01-22
2013
loading...