C语言中的变长参数

        C语言带有变长参数的机制,最常见的变长参数函数,一个是 printf,另一个就是 scanf 了。相信有人和我一样,很好奇其中的实现机制,本文就简要介绍变长参数的用法和实现原理。主要参考《程序员的自我修养》一书11.2节的内容。

  • 变长参数的用法
  •         变长参数函数的声明方法很简单,可选参数一律用英文省略号“…”表示。比如 printf 的声明:

    int printf(const char * for[......]

Read more

宏定义的几种特殊用法

        宏在 C 代码中十分普遍,最常见的用法莫过于定义一些有特殊含义的常量,或者控制编译过程。在最近阅读代码的过程中,有幸见识了几种不太常见的宏定义的用法,特总结一文。

  • #if 0 … #endif
  •         这是很好理解的一种用法,目的其实就是用来注释代码,被”#if 0″和”#endif”包裹起来的代码是不会被编译的,而用通常的多行注释方法把实际可运行的代码注释掉又不是一个很好的方法(这种注释还是专门用来以自[……]

    Read more

    GDB 基本用法

  • GDB 简介
  •         GDB:the GNU Project Debugger。
            简单来说,GDB 就是 Linux(或者说 *nix ?)环境下最通用的调试工具,它是非图形化的,人机通过“键入”各种指令直接交互,省去了鼠标点来点去之繁琐,并且在一[……]

    Read more

    DWM 设置多显示屏

            (转载请注明出处)

            DWM 的介绍和编译安装之前已有介绍,最近以来,本人也一直在使用这个窗口管理器。总的来说,其精简,快速,也很稳定,是一个实用又耐折腾的好“桌面”。不过美中也有不足,在两次组会时间,本人发现不知道该怎样来设置外接显示器,也带来了一些使用上的小麻烦。后经多方调查和尝试,终于找到了设置多显示屏的方法。网上的介绍比较少,写在这里备忘一下。

    • xrandr 及其基本使用
    •         linux 通过工具 xrandr 设置屏幕显示方式(分辨率、旋转、扩展屏幕等),其具体用法可以通过“man xrandr”查看,这里只介绍一下其最基本的用[……]

    Read more

    在 emacs 中使用 cscope

            阅读代码在学习编程或开发软件的过程中十分重要,几个月来阅读和改写代码的经历也让我意识到,拥有简洁好用的工具对更快更好地理解代码是多么关键。cscope 就是一个非常好的代码分析工具,当其与 emacs 双剑合璧时,甚至能带来酣畅淋漓的快感。

            还要感谢春哥,我至今 emacs 的大部分配置都来自于春哥。当我今年早些时候从配置文件中找到 cscope 的有关配置时,因为好奇而上网搜了一下,略作小试。而几个月[……]

    Read more

    DWM——Linux 上的桌面管理器

            与 Windows 不同,要说 Linux 上,有众多的窗口管理器。什么 Gnome,KDE,Unity,就像 Android 上一会儿一个锤子,一会儿一个 Flyme,一会儿又一个 MIUI 一样(在我看来,这一个个的深度定制不过也就是在内核上套了个不一样的盒子)。果然开放的系统就是不一样,大家想让它变成什么样,它就能变成什么样。

            对于一些比较老的机器,Linux 发行版也日渐变得庞大和缓慢。在这一方面,桌面管理器有着不可推卸的责任。动辄数百 MB 的体量,不仅占用了大量内存,还拖慢了处理器的速度。而本文要介绍的桌面管理器,则是史无前例的小体量,不光适合老机[……]

    Read more

    用 CodeViz 分析函数调用关系

            在之前的文章编译安装 CodeViz中讲到了如何安装 CodeViz,其实也就是如何编译打过补丁的 gcc 4.6.2。接下来就要利用编译好的工具对源代码进行函数调用方面的分析了。我们的目的是分析源代码(C,C++),生成函数调用关系图,并且在此过程中还可以根据需要进行一些配置。

    • 用打过补丁的 gcc 编译源代码
    •         这一步只要在 Makefile 中指定使用编译后的 gcc 而不是系统自带的 gcc。这样在生成目标文件的过程中编译器会把每个代码文件相应的调用关系文件输出,后缀名是 .cdepn(至少对 C 语言是这个)。当然,这里也存在一个隐患,就是不[……]

    Read more

    编译安装CodeViz

            转载请注明出处

            CodeViz 是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的开源工具。其基本原理是给 gcc 打个补丁,使其在编译源码时将函数调用的信息输出,之后再用 perl 脚本收集整理这些信息,最后调用 Graphviz 绘制函数调用关系图。(这么看来学会 Graphvi[……]

    Read more

    编译 OpenSSH

            转载请注明出处。

            本文展示普通用户编译 OpenSSH-6.6p1 的过程,只有编译而没有安装,编译后可正常使用,因此所有的操作均以普通用户的权限执行。

            总的来说,OpenSSH 的编译至少需要另外两个包:zlib 和 OpenSSL。前者是一个开源、通用的数据压缩库;而后者,呵呵,就是那个大名鼎鼎的 SS[……]

    Read more