也谈C语言标识符的NAMESPACE
P.J Plauger的"The Standard C Library"一书的Chapter0的章后练习中有这样的一道题:编写一个包含如下一行语句的正确的程序: x: ((struct x*)x)->x=x(5); 并描述这行语句中x的5种截然不同的use,这里其实涉及到这么一个知识或者说概念:C语言的命名空间(namespace),在"C语言参考手册"中还被称作: overloading class。 ...
P.J Plauger的"The Standard C Library"一书的Chapter0的章后练习中有这样的一道题:编写一个包含如下一行语句的正确的程序: x: ((struct x*)x)->x=x(5); 并描述这行语句中x的5种截然不同的use,这里其实涉及到这么一个知识或者说概念:C语言的命名空间(namespace),在"C语言参考手册"中还被称作: overloading class。 ...
很多技术人员都有在"技术细节"上"钻牛角尖"的"癖好",对此很多人褒贬不一;无论怎样,我也是属于这类人。C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢?这里我们一起来挖掘一下C语言变长参数的奥秘。 ...
C语言语法简单,但内涵却博大精深;如果在学习时只是止步于表面,那么往往后期会遇到很多困难。typedef是C语言中一个很好用的工具,大量存在于已有代码中,特别值得一提的是:C++标准库实现中更是对typedef有着大量的使用。但很多初学者对其的理解仅局限于:typedef用来定义一个已有类型的”别名(alias)”。正是因为有了这样的理解,才有了后来初学者在typedef int myint和typedef myint int之间的犹豫不决。很多国内大学的C语言课之授课老师也都是如是说的,或者老师讲的不够透彻,导致学生们都是如是理解的。我这里想结合C语言标准文档以及一些代码实例,也说说typedef。 ...
在公司里面,Windows还是一统天下的。人们已经熟悉了Windows上的各种软件和使用方法,特别是一些常用的配置管理工具,我们用的都是微软的产品,譬如Visual Source Safe,这给转到Ubuntu带来了一些麻烦,Ubuntu下虽然有Wine这个好工具,但是对于复杂的Windows软件来说,Wine的支持还是难以满足需求的。 ...
春节过后,项目一直比较忙, 我的Ubuntu自从上周日安装到系统中后就一直没有怎么用过,好不容易盼到周末了,这回可有时间体验一下’热得烫手’的Ubuntu了。 ...
清晨,部门新来的一位小兄弟打来求助电话,说是系统启动的时候出现类似:“ld.so.1: testmain: 致命的: 重定位错误: 文件./libtestshared.so: 符号static_add: 参照的符号没有找到"的错误。这个系统是05年开发的一个复用度很高的自研产品,后续项目只需在其基础上做少量二次开发工作即可满足新功能的要求。为了做到一定的通用性,我们使用了类似插件的框架,这样系统在启动的时候会根据配置加载一些’共享库’(.so文件),而这个小同事反映的问题就出在这。 ...
SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。内存问题一直是最令我们头疼的事情,弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。 我们来看两段程序: //testsigsegv.c int main() { char *pc = (char*)0×00001111; *pc = 17; } ...
这个Bug源于昨天凌晨的一次版本升级失败。睡了一大觉后,下午回到公司,重现了这个问题并找到了原因,发现这的确是一个’很有意思的Bug’。 ...
我们在编译自己开发的程序或者一些开源软件的时候,常常遇到类似如下的编译器错误信息: 未定义 文件中的 符号 在文件中 i /var/tmp//ccU4sj6I.o func /var/tmp//ccU4sj6I.o ld: 致命的: 符号参照错误. 没有输出被写入a.out collect2: ld returned 1 exit status ...
记得以前曾经两次谈到过内存对齐话题,一次在’也谈内存对齐‘一文中,另一次则是’也谈内存对齐(续)’,今天下午和同事又谈到内存对齐的问题了,遂想继续挖掘下去,看看其背后的故事。 关于内存对齐的中文文章多在介绍对齐的’法则’,比如为什么sizeof(T)和我们估计的T的大小有出入呢等等,而对于内存对齐的本质少有介绍,我在Google上搜索了一阵后,在IBM开发社区上发现一篇叫’Data alignment: Straighten up and fly right‘的文章,其中就有我想知道的关于’内存对齐背后的故事’,下面的很多内容都是来自那篇文章的。 ...