Linux C
芯片之美
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一些C语言的dark corner
1、这两个不是关键字,所以可以这样: int include; void define(void); 2、数组不能直接互相赋值,而结构体可以的原因下面这个解释感觉合理: dmr 在 1970s 初发明 C 语言是为了替换汇编语言,以便他和 ken 写操作系统。为了可见性(visibility),当初 C 语言里每个 operation (包括 operator、function c原创 2016-11-21 14:44:16 · 577 阅读 · 0 评论 -
C语言的平台相关性,编译器相关性
C 标准的 Rationale 之一: 优先考虑效率,而可移植性尚在其次。 这就要求程序员非常清楚这些规则,如果你要写可移植的代码,就必须清楚哪些写法是不可移植的,应该避免使用。 另一方面,写不可移植的代码有时候也是必要的,比如 Linux 内核代码使用了很多只有 gcc 支持的语法特性以得到最佳的执行效率,在写这些代码的时候就没打算用别的编译器 编译,也就没考虑可移植性原创 2016-11-22 10:58:31 · 884 阅读 · 0 评论 -
得到一个field在结构体(struct type)中的偏移量
宏定义:得到一个field在结构体(struct type)中的偏移量 #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field)) (type *)0:把0地址当成type类型的指针。 ((type *)0)->field:对应域的变量。 &((type *)0)->fiel原创 2016-12-05 17:04:52 · 760 阅读 · 0 评论 -
C语言数组的dirty corner
int a[10]; int *p = &a[0]; 数组名做右值时自动转换成指向首元素的指针,所以 a[2]和 p[2]本质上是一样的,都是通过指针间接寻址访问元素。E1[E2]这种写法和(*((E1)+(E2)))是等价的,*(p+2)也可以写成 p[2],p就像数组名一样,其实数组名也没有什么特殊的, a[2]之所以能取数组的第 2 个元素,是因为它等价于*(a+2),都是通过指针间原创 2016-11-23 16:53:34 · 553 阅读 · 0 评论 -
新年读书计划--第一本--C和指针
看朋友圈受到启发,这一年要尽可能的多读书。 目前,已经用大约一周的时间完成了一本书的阅读,C和指针。总体感觉这是一部很有经验的程序员写的书,但是年代有些久远,总是拿K&R C和ASCI C做比较,印象比较深的有 指针那一章,列出了不少怪异的指针用法,而又没有给出这些用法的语法词法原理和分析过程,是个败笔。最后两章更是草草了事,有种虎头蛇尾的感觉。 翻译的也比较生硬,在指针那一章尤其明显,原作原创 2017-01-07 12:56:48 · 468 阅读 · 0 评论 -
读书计划之第二本《C专家编程》
读完了上一本的《C和指针》,自然不会错过《C专家编程》,这是一本编程大牛写的经验型的小册子,从第一章“C Through the Mists of Time”开始,就感到这是我需要的书,从一个历史见证人的角度阐述了令我困惑的C语言的种种问题和缺陷,相信这一章是国内的作者很少能写出来的。 这本书最精华和最实用的的部分是第三章“Unscrambling Declarations in原创 2017-01-10 17:08:21 · 480 阅读 · 0 评论 -
Makefile经典教程
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make转载 2017-02-17 15:19:30 · 930 阅读 · 0 评论 -
C语言学习资源大全
漫谈C语言及如何学习C语言 在这里想比较系统的谈谈个人对C语言学习方法的理解。分别按照书籍、实验环境搭建、网络资源来分别介绍,希望能写的比较完整全面一些,给想学习C语言的朋友一个有价值的参考。 为什么要学习C语言? 为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言? 我在前面如何学习编程语言的博客文章http://sunxiunan.com/?p=转载 2017-02-21 16:21:31 · 7205 阅读 · 0 评论 -
比goto跳转的更远的函数
本来以为goto就是“任意”的跳转了,今天才知道还有比它更能跳的。 goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。 为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件申明了这些函数及同时所需的jmp_buf数据类型。这种跳转功能主要用原创 2017-04-13 15:08:56 · 2504 阅读 · 0 评论 -
sizeof的作用
int main() { int i = 3; int j; j = sizeof(++i + ++i); printf("i=%d j=%d", i, j); } 答案令我有点意外,是i=3 j=4。 根据这个结果,i++就没有进行运算,这算是对sizeof特性的一个认识吧。原创 2017-04-13 15:40:56 · 1339 阅读 · 0 评论 -
C类型转换
int main(void) { signed short A = -10; printf("~A = %u\n", ~A); char c = 128; printf("c=%d\n",c); return 0; } 通过这个简单的测试,发现自己对类型转换的规则的细节需要做一个分析,以明确转化时的规则。 1.char转为为int类型,即有符号signed char转换原创 2017-04-14 11:06:20 · 918 阅读 · 0 评论
分享