Linux C编程一站式学习的笔记(47)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • MathxH

    MathxH

    宏定义 尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。 #、##运算符和可变参数 在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab) #define STR(s) # s STR(hello world) 在宏定义中可..

    2013-09-07 11:38   1人喜欢

  • 洋蘑菇

    洋蘑菇

    思考题:主线程在一个全局变量ntid中保存了新创建的线程的id,如果新创建的线程不调 用pthread_self而是直接打印这个ntid,能不能达到同样的效果? Linux的pthread_t定义为: /代码内容已省略/ 所以可以的。

    2015-11-27 13:52

  • Marx

    Marx

    /代码内容已省略/ 运行结果: sizeof(buf2)这个表达式中数组名buf2不是做右值,计算结果是整个数组的储存空间大小。 关于buf3:在函数原型中参数可以写成数组的形式,但这个参数其实是指针类型,这是一条特殊规定。

    2015-08-17 16:02

  • Marx

    Marx

    宏的展开是个很复杂的过程,但可以用以下三步来简单描述: 1.首先用实参替换形参,将实参代入宏文本中; 2.然后如果实参也是宏,则展开实参; 3.最后再继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则完成展开。 但是有个例外,那就是第一步后,将实参代入宏文本后,实参之前如果遇到字符“#”或“##”,即使实参是宏,也不再展开实参,而是当作文本处理。

    2015-08-17 11:11

  • Marx

    Marx

    内联函数可以用来替换宏定义,因为宏定义不会检查语法,而且在运算优先级以及带有Side Effect的宏时容易出现错误。 但是内联函数会增加代码量,要小心使用 内联函数的定义很简单,只要函数定义前加上关键字inline即可

    2015-08-17 08:31

  • Marx

    Marx

    函数式宏定义经常写成一下形式(取自内核代码include/linux/pm.h): #define device_init_wakeup(dev, val) \ do{ \ device_can_wakeup(dev) = !!(val); \ device_set_wakeup_enable(dev, val); \ }while(0)

    2015-08-16 22:14

  • Marx

    Marx

    这一节主要讲了: 1.为什么要用共享库, 2.怎样创建共享库以及, 3.怎样确保链接的时候能找的到共享库

    2015-08-15 11:32

  • Marx

    Marx

    使用静态库的好处 1.链接器从静态库中只取出需要的目标文件来做链接,不需要的目标文件可以不链接。 2.链接的时候只需要写一个库文件名,而不需要写一长串目标文件名。

    2015-08-15 10:11

  • Marx

    Marx

    写.c文件和头文件时一般来说应遵循以下原则: * .c文件中可以有变量或函数的定义,而.h文件中应该只有变量或函数声明而没有定义。 * 不要把一个.c文件包含到另外一个.c文件中。

    2015-08-15 09:16

  • Marx

    Marx

    对于用角括号包含的头文件,gcc首先查找-I选项制定的目录,然后查找系统的头文件目录; 而对于用引号包含的头文件,gcc首先查找包含这个头文件的当前文件所在的目录,然后查找-I选项指定的目录,然后查找系统的头文件目录。

    2015-08-15 09:06

<前页 1 2 3 4 5 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

Linux C编程一站式学习

>Linux C编程一站式学习