博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言里的一些陷阱
阅读量:4294 次
发布时间:2019-05-27

本文共 589 字,大约阅读时间需要 1 分钟。

每一种语言都会有很多“陷阱”,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):重新分配后的内存大小不能小于之前的内存大小。

转载地址:http://ntuws.baihongyu.com/

你可能感兴趣的文章
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>