C语言里的一些陷阱

来源:互联网 发布:八音盒音乐制作软件 编辑:程序博客网 时间:2024/06/07 00:54

每一种语言都会有很多“陷阱”,c语言也不例外。这里我每次遇到的时候就补充一下,以期不断提升自己的水平。


语法方面的

1.结构体是可以赋值的,但是不能比较(这里说的主要是==操作,可以用memcpy来判断)。

2.register变量最好用于局部变量。(tcc可以用于全局变量,gcc需要指定,不过一般都不用指定寄存器变量了)

3.i++不能作为左值,++i可以。(标准库里有不少*des ++ = * src ++的语句,其实++优先级比*高,最终还是对*(s)赋值。)

4.结构体指针可以在任意位置声明,结构体变量必须在定义结构体之后声明。

5.long类型长度不定,根据C程序设计语言一书,int则根据机器位16位或者32位,long类型至少为32位,所以64位整型需要使用 long long,类似的还有double,double至少为32位,不同的是大部分编译器double默认64位

6.函数调用顺序不可控,比如foo(a(), b()),C语言标准中是没有定义a和b执行的顺序的,而是由编译器自行决定


标准库函数方面

1.fputc:在windows下面,使用fputc(10,fp);的时候,写入文件的并不是10,而是13 10,就是windows下的换行符\r\n。

2.realloc(void*,int,int):重新分配后的内存大小不能小于之前的内存大小。

0 0
原创粉丝点击