内容简介 · · · · · ·
本书有两条线索,一条线索是以Linux平台为载体全面深入地介绍C语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法。本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识C语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识C语言。.
本书适合做零基础的初学者学习C语言的第一本教材,帮助读者打下牢固的基础。有一定的编程经验但知识体系不够完整的读者也可以对照本书查缺补漏,从而更深入地理解程序的工作原理。本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,也适合作为高等院校程序设计基础课程的教材。本书对于C语言的语法介绍得非常全面,对C99标准做了很多解读,因此也可以作为一本精简的C语言语法参考书。...
原文摘录 · · · · · · ( 全部 )
-
尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。 (查看原文) —— 引自章节:预处理 -
在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab) #define STR(s) # s STR(hello world) 在宏定义中可以用##运算符把前后两个预处理Token连接成一个预处理Token,和#运算符不同,##运算符不仅限于函数式宏定义,变量式宏定义也可以用。 #define CONCAT(a, b) a ## b CONCAT(con, cat) (查看原文) —— 引自章节:预处理
> 全部原文摘录
豆瓣成员常用的标签(共129个) · · · · · ·
喜欢读"Linux C编程一站式学习"的人也喜欢的电子书 · · · · · ·
喜欢读"Linux C编程一站式学习"的人也喜欢 · · · · · ·
Linux C编程一站式学习的话题 · · · · · · ( 全部 条 )



Linux C编程一站式学习的书评 · · · · · · ( 全部 32 条 )

此书的最新版官方地址 http://songjinshan.com/akabook/

> 更多书评 32篇
-
宏定义 尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。 #、##运算符和可变参数 在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab) #define STR(s) # s STR(hello world) 在宏定义中可以用##运算符把前后两个预...
2013-09-07 11:38 1人喜欢
宏定义
尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。 引自 预处理 #、##运算符和可变参数
在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab) #define STR(s) # s STR(hello world) 在宏定义中可以用##运算符把前后两个预处理Token连接成一个预处理Token,和#运算符不同,##运算符不仅限于函数式宏定义,变量式宏定义也可以用。 #define CONCAT(a, b) a ## b CONCAT(con, cat) 引自 预处理 其他预处理特性
C标准规定了几个特殊的宏,在不同的地方使用可以自动展开成不同的值,常用的有__FILE__和__LINE__,__FILE__展开为当前源文件的文件名,是一个字符串,__LINE__展开为当前代码行的行号,是一个整数。 引自 预处理 回应 2013-09-07 11:38 -
思考题:主线程在一个全局变量ntid中保存了新创建的线程的id,如果新创建的线程不调 用pthread_self而是直接打印这个ntid,能不能达到同样的效果? Linux的pthread_t定义为: typedef unsigned long int pthread_t; 所以可以的。
2015-11-27 13:52
-
#include <stdio.h> void foo(char buf3[20]) { printf("%d\n", sizeof(buf3)); } int main(void) { char *buf = "hello world"; char buf2[20] = "hello world"; printf("%d\n%d\n%d\n", sizeof(buf), sizeof(buf2), sizeof("hello world")); foo("hello world"); return 0; } 运行结果: sizeof(buf2)这个表达式中数组名buf2不是做右值,计算结果是整个数组的储存空间大小。 关于buf3:在函数原型中参数可以写成数组的...
2015-08-17 16:02
#include <stdio.h> void foo(char buf3[20]) { printf("%d\n", sizeof(buf3)); } int main(void) { char *buf = "hello world"; char buf2[20] = "hello world"; printf("%d\n%d\n%d\n", sizeof(buf), sizeof(buf2), sizeof("hello world")); foo("hello world"); return 0; }
运行结果:
sizeof(buf2)这个表达式中数组名buf2不是做右值,计算结果是整个数组的储存空间大小。 关于buf3:在函数原型中参数可以写成数组的形式,但这个参数其实是指针类型,这是一条特殊规定。
回应 2015-08-17 16:02 -
宏的展开是个很复杂的过程,但可以用以下三步来简单描述: 1.首先用实参替换形参,将实参代入宏文本中; 2.然后如果实参也是宏,则展开实参; 3.最后再继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则完成展开。 但是有个例外,那就是第一步后,将实参代入宏文本后,实参之前如果遇到字符“#”或“##”,即使实参是宏,也不再展开实参,而是当作文本处理。
2015-08-17 11:11
-
Maiie (体验,思考,活着就是生活。)
-
狼舞花开 (自律)
1.注释不能嵌套(Nest)使用,就是说一个注释的文字中不能再出现 /* 和 */ 了,例如 /* text1 /* text2 */ text3 */ 是错误的,编译器只把 /* text1 /* text2 */ 看成注释,后面的 text3 */ 无法解析,因而会报错。 2.有的C代码中有类似 // comment 的注释,两个/斜线(Slash)表示从这里直到该行末尾的所有字符都属于注释,这种注释不能跨行,也不能穿插在一行代码中间。这是从C++借鉴的语法,在C99中被标准化。 3.夹在双引号...2014-05-05 00:30
1.注释不能嵌套(Nest)使用,就是说一个注释的文字中不能再出现 /* 和 */ 了,例如 /* text1 /* text2 */ text3 */ 是错误的,编译器只把 /* text1 /* text2 */ 看成注释,后面的 text3 */ 无法解析,因而会报错。 2.有的C代码中有类似 // comment 的注释,两个/斜线(Slash)表示从这里直到该行末尾的所有字符都属于注释,这种注释不能跨行,也不能穿插在一行代码中间。这是从C++借鉴的语法,在C99中被标准化。 3.夹在双引号中间的一串字符才是它的内容。 \’ ‘引号(Single Quote或Apostrophe) \” “引号(Double Quote) \? ?号(Question Mark) \ 反斜线(Backslash) \a 响铃(Alert或Bell) \b 退格(Backspace) \f 分页符(Form Feed) \n 换行符(Line Feed) \r 回车(Carriage Return) \t 水平制表符(Horizontal Tab) \v 垂直制表符(Vertical Tab)
回应 2014-05-05 00:30
-
思考题:主线程在一个全局变量ntid中保存了新创建的线程的id,如果新创建的线程不调 用pthread_self而是直接打印这个ntid,能不能达到同样的效果? Linux的pthread_t定义为: typedef unsigned long int pthread_t; 所以可以的。
2015-11-27 13:52
-
#include <stdio.h> void foo(char buf3[20]) { printf("%d\n", sizeof(buf3)); } int main(void) { char *buf = "hello world"; char buf2[20] = "hello world"; printf("%d\n%d\n%d\n", sizeof(buf), sizeof(buf2), sizeof("hello world")); foo("hello world"); return 0; } 运行结果: sizeof(buf2)这个表达式中数组名buf2不是做右值,计算结果是整个数组的储存空间大小。 关于buf3:在函数原型中参数可以写成数组的...
2015-08-17 16:02
#include <stdio.h> void foo(char buf3[20]) { printf("%d\n", sizeof(buf3)); } int main(void) { char *buf = "hello world"; char buf2[20] = "hello world"; printf("%d\n%d\n%d\n", sizeof(buf), sizeof(buf2), sizeof("hello world")); foo("hello world"); return 0; }
运行结果:
sizeof(buf2)这个表达式中数组名buf2不是做右值,计算结果是整个数组的储存空间大小。 关于buf3:在函数原型中参数可以写成数组的形式,但这个参数其实是指针类型,这是一条特殊规定。
回应 2015-08-17 16:02 -
宏的展开是个很复杂的过程,但可以用以下三步来简单描述: 1.首先用实参替换形参,将实参代入宏文本中; 2.然后如果实参也是宏,则展开实参; 3.最后再继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则完成展开。 但是有个例外,那就是第一步后,将实参代入宏文本后,实参之前如果遇到字符“#”或“##”,即使实参是宏,也不再展开实参,而是当作文本处理。
2015-08-17 11:11
论坛 · · · · · ·
纠错! —— 第22章 Makefile基础 | 来自已注销 | 1 回应 | 2019-07-21 |
请问此书是绝版了么?感觉没卖的了 | 来自lonelypersist | 2018-04-19 | |
封面想学O'Reilly,但是书名暴漏了 | 来自[已注销] | 25 回应 | 2014-05-09 |
国内开源书籍无出其右 | 来自秋雨 | 2 回应 | 2012-05-17 |
应该做大学教科书的 | 来自Q | 3 回应 | 2010-10-30 |
> 浏览更多话题
在哪儿借这本书 · · · · · ·
以下书单推荐 · · · · · · ( 全部 )
谁读这本书?
二手市场
订阅关于Linux C编程一站式学习的评论:
feed: rss 2.0
0 有用 Felicia 2013-07-14
非常好的书,有通俗易懂的原理剖析,有非常适合初学者的code,有形象化的展示。
0 有用 催眠 2012-11-01
看过这本书的人相信会对国人的技术书重拾一点信心。虽然所涉极广,但作者对内容、示例的选择仍能保证读者在这些方面“入门”,入门之后的事情需要读者自己搞定了;同时,作者花了相当多的心思在保证内容的连贯和相关,这对于读者建立起相关知识的系统性理解很有帮助。
0 有用 timebug 2011-12-12
国内真的不缺好的技术类书籍的作者,只是路都给那些个教我们如何include一个.c文件的”国家级规划教材“们给堵了。五星献给虽然写了本好书却没能赚到多少钱的松劲衫老师。:-)
14 有用 [已注销] 2013-10-20
http://akaedu.github.io/book/index.html 的确是入门书以及一站式学习,之前没系统学过,这书足够浅....很好用
0 有用 Antigone 2011-12-08
看了一半..只了解了C的基本语法,更hardcore的地方,实在看不下去诶..
0 有用 慕容宇月 2021-02-11
这本书是我看过的最好的Linux系统编程入门书籍,从C语言基础开始一步步到Linux系统编程,通俗易懂且内容环环相扣。
0 有用 木南 2021-01-18
还得再读一遍
0 有用 风空之枫 2020-11-19
补标,有人想学C语言我就丢给他这本书了
0 有用 Hugsy 2020-10-19
除网络编程外粗读一遍,目前找到的最好的C语言程序设计入门书,深入浅出,一口气讲清了C的基本语法、基本的算法与数据结构、基本的计算机原理外加Linux,真是极佳的书。
0 有用 FD 2020-08-26
大体翻过