博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言核心技术 二
阅读量:2443 次
发布时间:2019-05-10

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

作者:刘旭晖

================================================

malloc 和 calloc

calloc会把分配出来的内存中的每一个字节都初始化为0, 这可以保证不仅是将分配给结构对象的内存都初

始化为0,包括成员之间的Padding也是0

此外,个人觉得用Calloc的好处在于他能保证你分配出来的内存确实可用。因为malloc实际上只是预留出一

部分内存地址,在真正使用之前并不真正分配内存。 这可能导致你可以成功的分配很大的内存,结果发现

最后使用的时候OOM Out of Memory了。 有篇很好的文章详细的分析了这一问题:

================================================

fopen时的访问模式 r 和 w

很少在应用层编程,一直以为r就是读,w就是写,不能混用。 原来这不是最根本的区别,r+ 和 w+ 就是读

写都可以的。最更本的区别在于,如果一个文件不存在,r会失败,w会创建。如果一个文件已经存在 r模式

打开,w模式会打开并truncate(清空)

================================================

#include 头文件的嵌套层数限制

书上说是16层,也就是说一个头文件包含另一个头文件,不断的包含最多可以有16层的深度。

觉得少了一点,试了一下,用递归嵌套 1.h 包含2.h 2.h包含1.h

x86 上 gcc4.1.2 出错提示 #include nested too deeply 的时候,嵌套了198层,这个。。。真的足够用

了。

================================================

printf输出格式中,可以用变量来指定字段宽度,在位宽描述符的地方使用*,对应变量位置即可:

        char str[]="hello , guys";

        int width = 20;

        printf("%*s/n",width,str);

================================================

GCC:

想要得到GCC预处理一个文件的结果(插入头文件,展开宏),可以使用 -E 参数:

GCC -E -o file.i file.c

-C 参数可以保留源文件中的注释

用GCC输出汇编语言代码时,可以使用 -fverbose-asm 将C语言中的变量名作为汇编语言的注释。

逐行对比查看GCC如何把C语言翻译成汇编代码,这个应该挺有用:

gcc -g -o file.o -Wa,-a=file.asm,-L file.c

================================================

Makefile 中 =  :=  ?= 的区别:

= 递归展开,变量会原封不动的存储字符序列,知道被引用的时候再展开。

:= 简单展开,在变量赋值的时候就展开,后续修改对它赋值时引用的变量不影响它的值。
?= 如果变量原先没有赋值,则递归展开,否则不变。 这个应该比较常出现在判断变量是否已经在环境变量中被定义的情况。

如下Makefile

STR = "INIT"

STR2 = "INIT"
STR3 = "INIT"

NAME = "First"

STR = $(NAME)
STR2 := $(NAME)
STR3 ?= $(NAME)
STR4 ?= $(NAME)

NAME = "Second"

ALL:

        @echo $(STR)
        @echo $(STR2)
        @echo $(STR3)
        @echo $(STR4)

Make的输出结果是:

Second

First
INIT
Second

================================================ 

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

你可能感兴趣的文章
http与https_HTTP与HTTPS
查看>>
node.js运行js_Node.js运行时v8选项列表
查看>>
git教程_出色的Git教程的不完整列表
查看>>
express发送文件_使用Express发送文件
查看>>
我如何运行一些JavaScript代码段
查看>>
地理位置api_如何使用地理位置API
查看>>
数据结构设计 数据字典_Go数据结构:字典
查看>>
node_modules文件夹的大小不是问题。 这是一种特权
查看>>
dom 删除所有子元素_如何从DOM元素中删除所有子级
查看>>
html 打印样式控制_如何使用样式打印HTML
查看>>
gatsby_Next.js vs Gatsby vs create-react-app
查看>>
掌握React.Memo
查看>>
golang 延迟_了解Go中的延迟
查看>>
react 组件样式_如何设置React组件的样式
查看>>
node.js 模块_如何创建Node.js模块
查看>>
centos上安装git_如何在CentOS 8上安装Git
查看>>
在JavaScript中优化switch语句
查看>>
express 模板引擎_了解Express模板引擎
查看>>
如何在CentOS 8上安装Node.js
查看>>
如何在Ubuntu 20.04上安装Git
查看>>