随笔分类 -  Linux C

摘要:#include int main(int argc, char *argv[]) { int a[3]={1,2,3}; int (*pa)[3]; // *pa=a; //错误,因为pa没有被赋值,怎么取值,语法错误。 pa=&a; //正确,&a为指向数组的地址,和pa类型匹配 printf("*pa=%p\n",*pa); //正确,*pa含义为:对p... 阅读全文
posted @ 2017-11-20 21:38 立体风 阅读(358) 评论(0) 推荐(0)
摘要:Linux下的gdb和gcc默认输出的汇编都是AT&T格式的,但是它们都有方式来转换为Intel格式。 -masm=[intel|att] 选择intel或AT&T的汇编语法gcc -S -masm=intel test.cgdb则是设置环境变量set disassembly-flavor inte 阅读全文
posted @ 2017-11-20 08:48 立体风 阅读(2490) 评论(0) 推荐(0)
摘要:1、变量名在编译阶段被编译器替换成存储该变量值的内存空间的首地址,简单说:变量名代表存储该变量的内存空间首地址。 例如:定义一个int型变量 int a=10; //int型变量的用4个连续的字节存储,变量名a代表第一个字节的地址。 double b=12.1; //double型变量用8个连续的字 阅读全文
posted @ 2017-11-20 08:39 立体风 阅读(1506) 评论(0) 推荐(0)
摘要://char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明,关键是搞清楚这个变量是个什么东西(函数、指针、数组), //是函数那么剩下的就是他的参数和返回值, //是指针那剩下部分是说明他指向什么, //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C 阅读全文
posted @ 2017-11-19 19:22 立体风 阅读(362) 评论(0) 推荐(0)
摘要:1、C语言中每个变量都有3个性质:存储期限、作用域、链接 1)存储期限:变量的存储期限决定了为变量预留的内存被释放的时间。共2种,自动存储期限(auto),静态存储期限(static),自动存储(auto)的变量在所属块被执行时获得内存单元,并在块终止时释放内存单元,自动的获得或释放内存,故名aut 阅读全文
posted @ 2017-11-12 10:22 立体风 阅读(3108) 评论(0) 推荐(0)
摘要:首先,一些国外的研究成果: 一个用英语解析复杂声明的网站:http://cdecl.org 图表说明复杂声明(英):http://c-faq.com/decl/spiral.anderson.html 另一个举例说明(英):http://www.unixwiz.net/techtips/readin 阅读全文
posted @ 2017-11-07 14:12 立体风 阅读(287) 评论(0) 推荐(0)
摘要:1个字节在内存存储没有争议,当多个字节在内存中存储时,就有了不同的意见,目前,主要有2个方式: 小端:低字节存低地址,高字节存高地址。Little-Endian 大端:高字节存低地址,低字节存高地址。Big-Endian 看图: 小端字节序:低字节存于内存低地址;高字节存于内存高地址。如一个long 阅读全文
posted @ 2017-11-01 09:14 立体风 阅读(273) 评论(0) 推荐(0)
摘要:(void)0相当于宏NULL,NULL本身的含义为“空”,在c语言代表“不存在、不确定”的含义。 0不能简单的理解为“没有”的意思,在c语言及二进制中,0和1代表的是“一件事物的正反两个方面“,0是一种明确的状态,不是没有含义。 举例: 1、就像一个led灯开关一样,0代表关,1代表开。”关“是一 阅读全文
posted @ 2017-10-30 12:17 立体风 阅读(9505) 评论(1) 推荐(2)
摘要:在32位平台和64位平台上,同一种数据类型可能有不同的数据长度: 看到没, 从上面的结果可以看到不同,所以不要假定上表内颜色背景行的数据长度,因为它是会变化的。 因为系统的函数会返回上述的这些值,所以必须知道他们的大小并进行相应的防错性转换。而另外的情况,你需要跨不同平台固定数据长度数据类型的话,可 阅读全文
posted @ 2017-10-25 17:50 立体风 阅读(12175) 评论(0) 推荐(0)
摘要:man手册内容详细,解释到位,因为好多都是软件的原创者自己写的说明文档,当然是第一手的资料。但是,有几个难点需要克服: 1、英文不易阅读,通常我是先在书上或者网络上找到某个命令的详细说明和解释,然后在通过man手册查看该命令,通俗的讲:带着答案看问题的方法。勉强能够读懂,下一次再次忘记了该命令的用法 阅读全文
posted @ 2017-10-20 07:46 立体风 阅读(2154) 评论(0) 推荐(0)
摘要:有时候内核代码因为各种原因,发生改变,如何查找更新理由? 1、首先git内核全部代码,不能用下载的压缩包,git可以包含全部信息。 2、查看下载的内核版本? 3、比如:我想查看 include/linux/kernel.h内的min3()函数是何时更改的? 4、首先:用grep命令,查看min3的行 阅读全文
posted @ 2017-10-19 17:56 立体风 阅读(344) 评论(0) 推荐(0)
摘要:1、先上实现代码: __UNIQUE_ID(min1_)含义是制造一个唯一的标识符:__UNIQUE_ID_min1_0 __UNIQUE_ID(min2_)含义是制造一个唯一的标识符:__UNIQUE_ID_min2_1 2、为什么把x,y赋值给_min1和_min2然后返回_min1和_min2 阅读全文
posted @ 2017-10-19 12:16 立体风 阅读(727) 评论(0) 推荐(0)
摘要:在《c标准库》实现assert.h中有一个语句: 其他都理解,就是为啥0还要用void强转一下? 经过一番查阅,原来:给0加void强转,主要的目的是防止该宏被当作右值使用。 比如: 如果assert(test)中test为真,返回(void)0,编译器就会因类型不匹配(int和哦void)而报错。 阅读全文
posted @ 2017-10-19 11:18 立体风 阅读(346) 评论(0) 推荐(0)
摘要:1、手工写了一个程序验证void *指针加减运算移动几个字节: 输出: 由上可知,当一个int指针被强转为void型指针后,加1,由以前移动4个字节变为了移动1个字节。 结论:void *指针加减1,移动1个字节,这个在一些计算地址的宏和函数里会用到。 例如:container_of宏: 阅读全文
posted @ 2017-10-19 08:53 立体风 阅读(9353) 评论(0) 推荐(1)
摘要:最近在学习c语言宏编程,看到了container_of宏,深入学习了一天,做个笔记留念。 1、看一下书上写的container_of的版本: 2、举一个实例: 替换后的结果: 如果替换后的结果你还能看懂,说明你是真明白了,呵呵,有没有兴趣自己写一遍替换后的代码? 3、多余的不说了,网上有的是讲解的, 阅读全文
posted @ 2017-10-19 08:32 立体风 阅读(10353) 评论(0) 推荐(0)
摘要:1、c语言的结构体中,因为字节对齐的问题,导致成员地址并不能根据类型的大小进行计算。例如: 2、offsetof宏的实现如下: 哈哈,复杂吧,解释一下:由于造成空洞的对齐动作是由编译器负责完成的,这里有一个欺骗编译器的指令:((TYPE *)0), 意思是定义一个指向TYPE类型的指针,且该指针值( 阅读全文
posted @ 2017-10-18 10:22 立体风 阅读(2883) 评论(0) 推荐(0)
摘要:一、在c语言中,0是一个特殊的值,它可以表示:整型数值0,空字符,逻辑假(false)。表示的东西多了,有时候不好判断。尤其是空字符和数字0之间。 为了明确的指出,0是空字符的含义,用用到了: ((void *) 0) 这个表达式。表示把0强制转换为空字符,不管以前代表的什么含义。 在c的标准头文件 阅读全文
posted @ 2017-10-07 17:14 立体风 阅读(13040) 评论(0) 推荐(0)
摘要:gnu的基本看不懂,因为套了一层又一层复杂的东西。 我现在能看懂的2个c标准库是openbsd的,还有一个嵌入c的库。 https://github.com/openbsd/src/tree/master/lib/libc https://uclibc.org/ 对以上网站做出贡献的人表示感谢。谢谢 阅读全文
posted @ 2017-09-13 14:49 立体风 阅读(2734) 评论(0) 推荐(1)
摘要:原型: int strlen(const char *s); 作用:返回字符串的长度。 方法1:利用中间变量 方法2:利用指针 方法3:利用递归 方法4:利用递归2 方法5:利用中间变量2 阅读全文
posted @ 2017-09-01 22:19 立体风 阅读(1416) 评论(1) 推荐(1)
摘要:原型:int strcmp(const char *str1,const char *str2) 原理:根据大于,小于,相等分别返回正,负,零 实现: 方法2: 错误的代码:"abcd"和“abfd”会显示相等,为什么?: 阅读全文
posted @ 2017-09-01 21:38 立体风 阅读(4195) 评论(0) 推荐(0)