随笔分类 - GCC
GCC编译器的学习,还有glibc标准库的内容也在这里留一份。
摘要:异或运算:^ 定义:它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。 特点:如果对一个值连续做两次 XOR,会返回这个值本身。 上面代码中,原始值是1010,再任意选择一个值(上例是1111),做两次 XOR,最后总是会得到原始值1010。这
阅读全文
摘要:今天看书《C++高级语言程序设计》(徐惠民)的书中关于指针的指针作为函数的参数一节,对指针有了更深层次的感悟,记录。 要点1:解引用符*的作用,把它放在一个地址的左边,可以取得这个地址内存放的值。 要点2:指针就是存放地址的变量,可以简单的理解为:指针就是一个地址。 要点3: int a=10; i
阅读全文
摘要:git bash是一个比较好用的终端(win下),但有一些细节需要调整后才好用。 1、比如,登陆后终端的表格,以及个别符号显示为乱码。 解决方法: 1)、点击git bash左上角,选择“option”->“Text” 2)、在该页面最下方,“locale”栏和“character set”栏内选择
阅读全文
摘要:cppman是一个在命令行查询c和c++语法及标准库函数的工具,非常好用,python3编写,记录一下安装过程: 解释:因为centos系统默认python为2.7,所以对应的pip也是针对2.7版本,把他们升级到3.4只需要用pip3升级一下,pip就默认是3.4版本的了。
阅读全文
摘要:1、执着cscope.files文件,对源码目前全文件搜索 find `pwd` -type f > cscope.files `pwd`生成当前目录的绝对路径,这样在cs命令里面就可以不用写那个pre-path了 2、对一些返回数量过多的函数,可以搜索它的隐藏函数 比如:weak_alias这个宏
阅读全文
摘要:首先,同样的原型的两个函数在连个不同的c文件中都有定义,把这两个c文件编译、连接在一起,也没有什么错误。原因就是因为,gcc中有一个strong symbol和weak symbol的概念。默认函数定义都是strong symbol的,两个相同的strong symbol连接在一起,肯定会产生”sy
阅读全文
摘要:最近下载了kernel的最新源码4.15版,但下载后的linux内核不仅包含了x86架构的函数还包含了如:arm、powerPC等等其他架构的函数,如果直接生成tags文件,将来查找时,多种架构的同名函数会混淆在一起,很不方便。好在,贴心的linux内核组给准备了tags.sh文件,可以自动生成相应
阅读全文
摘要:国际标准组织发布c11后,gnu为自己的编译器发布两种标准gnu11和c11 gnu11:带gnu c扩展的c11标准,如果你的代码包含了typeof,__attribute__等等gnu的扩展,就必须用这个。 c11:这个就是纯c11的标准,不带gnu扩展。 可以在Makefile中声明: 或者,
阅读全文
摘要:1、ctags -R 有个问题,成员变量没有包含在里面。所以自动完成对象的成员时没有提示。解决办法:$ctags -R --fields=+iaS --extra=+q *–fields=[+|-]flags–fields指定tags的可用扩展域(extension fields),以包含到tags
阅读全文
摘要:#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...
阅读全文
摘要:Linux下的gdb和gcc默认输出的汇编都是AT&T格式的,但是它们都有方式来转换为Intel格式。 -masm=[intel|att] 选择intel或AT&T的汇编语法gcc -S -masm=intel test.cgdb则是设置环境变量set disassembly-flavor inte
阅读全文
摘要:在32位平台和64位平台上,同一种数据类型可能有不同的数据长度: 看到没, 从上面的结果可以看到不同,所以不要假定上表内颜色背景行的数据长度,因为它是会变化的。 因为系统的函数会返回上述的这些值,所以必须知道他们的大小并进行相应的防错性转换。而另外的情况,你需要跨不同平台固定数据长度数据类型的话,可
阅读全文
摘要:最近在学习c语言宏编程,看到了container_of宏,深入学习了一天,做个笔记留念。 1、看一下书上写的container_of的版本: 2、举一个实例: 替换后的结果: 如果替换后的结果你还能看懂,说明你是真明白了,呵呵,有没有兴趣自己写一遍替换后的代码? 3、多余的不说了,网上有的是讲解的,
阅读全文
摘要:1、c语言的结构体中,因为字节对齐的问题,导致成员地址并不能根据类型的大小进行计算。例如: 2、offsetof宏的实现如下: 哈哈,复杂吧,解释一下:由于造成空洞的对齐动作是由编译器负责完成的,这里有一个欺骗编译器的指令:((TYPE *)0), 意思是定义一个指向TYPE类型的指针,且该指针值(
阅读全文