10 2017 档案
摘要:(void)0相当于宏NULL,NULL本身的含义为“空”,在c语言代表“不存在、不确定”的含义。 0不能简单的理解为“没有”的意思,在c语言及二进制中,0和1代表的是“一件事物的正反两个方面“,0是一种明确的状态,不是没有含义。 举例: 1、就像一个led灯开关一样,0代表关,1代表开。”关“是一
阅读全文
摘要:虽然win10下搞了一个ubuntu子系统,但是还是各种不习惯,经过一番研究,我还是选择下面的组合来搭建: Git Bash + ConEmu + MinGW15.3 + vim + chocolatey 1、到git的官网下载git软件的win版,超级好用自动集成git bash还有linux下各
阅读全文
摘要:1、avr用的c语言标准库 http://www.nongnu.org/avr-libc/ 2、avr的下载上传器 http://www.nongnu.org/avrdude/ 3、编程环境platformIO Core http://www.platformio.org 4、avr的一个模拟器 h
阅读全文
摘要:在32位平台和64位平台上,同一种数据类型可能有不同的数据长度: 看到没, 从上面的结果可以看到不同,所以不要假定上表内颜色背景行的数据长度,因为它是会变化的。 因为系统的函数会返回上述的这些值,所以必须知道他们的大小并进行相应的防错性转换。而另外的情况,你需要跨不同平台固定数据长度数据类型的话,可
阅读全文
摘要:位置:include/linux/kernel.h 定义: 作用:结果看下面,作用未知,好像是为了一个叫:word_at_a_time的宏,哎。 重点1:什么是0UL UL是c语言中的常量后缀,用于整型常量。字母U代表unsigned,字母L代表Long,0UL表示这个整型常量0的类型为无符号长整型
阅读全文
摘要:man手册内容详细,解释到位,因为好多都是软件的原创者自己写的说明文档,当然是第一手的资料。但是,有几个难点需要克服: 1、英文不易阅读,通常我是先在书上或者网络上找到某个命令的详细说明和解释,然后在通过man手册查看该命令,通俗的讲:带着答案看问题的方法。勉强能够读懂,下一次再次忘记了该命令的用法
阅读全文
摘要:有时候内核代码因为各种原因,发生改变,如何查找更新理由? 1、首先git内核全部代码,不能用下载的压缩包,git可以包含全部信息。 2、查看下载的内核版本? 3、比如:我想查看 include/linux/kernel.h内的min3()函数是何时更改的? 4、首先:用grep命令,查看min3的行
阅读全文
摘要:1、先上实现代码: __UNIQUE_ID(min1_)含义是制造一个唯一的标识符:__UNIQUE_ID_min1_0 __UNIQUE_ID(min2_)含义是制造一个唯一的标识符:__UNIQUE_ID_min2_1 2、为什么把x,y赋值给_min1和_min2然后返回_min1和_min2
阅读全文
摘要:在《c标准库》实现assert.h中有一个语句: 其他都理解,就是为啥0还要用void强转一下? 经过一番查阅,原来:给0加void强转,主要的目的是防止该宏被当作右值使用。 比如: 如果assert(test)中test为真,返回(void)0,编译器就会因类型不匹配(int和哦void)而报错。
阅读全文
摘要:1、手工写了一个程序验证void *指针加减运算移动几个字节: 输出: 由上可知,当一个int指针被强转为void型指针后,加1,由以前移动4个字节变为了移动1个字节。 结论:void *指针加减1,移动1个字节,这个在一些计算地址的宏和函数里会用到。 例如:container_of宏:
阅读全文
摘要:最近在学习c语言宏编程,看到了container_of宏,深入学习了一天,做个笔记留念。 1、看一下书上写的container_of的版本: 2、举一个实例: 替换后的结果: 如果替换后的结果你还能看懂,说明你是真明白了,呵呵,有没有兴趣自己写一遍替换后的代码? 3、多余的不说了,网上有的是讲解的,
阅读全文
摘要:1、c语言的结构体中,因为字节对齐的问题,导致成员地址并不能根据类型的大小进行计算。例如: 2、offsetof宏的实现如下: 哈哈,复杂吧,解释一下:由于造成空洞的对齐动作是由编译器负责完成的,这里有一个欺骗编译器的指令:((TYPE *)0), 意思是定义一个指向TYPE类型的指针,且该指针值(
阅读全文
摘要:1、centos下git版本太久了,才1.8几,而官方更新的还是很活跃的,于是我就想源码安装一个新版本。 2、首先到: https://github.com/git/git/releases 下载最新版本,如果服务器太慢可以在本地下载后,用pscp上传。 3、还要安装git的依赖包和编译环境: 4、
阅读全文
摘要:1、有的时候,本地下载源码包的速度快过vps(主要指国内),那么可以用迅雷下载后上传到vps。 2、为了这么点事情,专门安装一个ftp软件,太麻烦,于是想到了putty贴心的pscp小程序。 3、首先,复制一个cmd的快捷方式到putty的安装目录,并且把启动地址改为putty的安装目录。 4、运行
阅读全文
摘要:恢复内容开始 1、登陆一个新的vps时候,发现git的版本是1.8的,太久了,于是就源码安装了新的版本2.4。 2、老版本在/usr/bin/git,新版本安装的/usr/local/bin/git 3、问题来了,安装完新的后,卸载了旧的版本,在运行git --version时,却提示如下错误: 4
阅读全文
摘要:1、命令: yum install man 后发现,有的函数仍然没有。经过一番查找,原来安装的不完全,还要执行下面命令: 2、总结:cengos下安装man手册命令: 3、Ok,每一个linux发行版总有那么一点不一样,而且体现在方方面面哦。
阅读全文
摘要:一、在c语言中,0是一个特殊的值,它可以表示:整型数值0,空字符,逻辑假(false)。表示的东西多了,有时候不好判断。尤其是空字符和数字0之间。 为了明确的指出,0是空字符的含义,用用到了: ((void *) 0) 这个表达式。表示把0强制转换为空字符,不管以前代表的什么含义。 在c的标准头文件
阅读全文