头文件里放什么

        对 C 和 C++ 程序来说,头文件里放什么,这不是一个难回答的问题。在编写小规模代码时,很少遇到这一困扰,而在编写大型项目时,对这一问题建立明确的认识却是十分必需的。

  • 头文件中放什么
  • 版本、版权信息
  • #include 包含头文件
  • 常量定义及初始化
  • 全局变量声明(⚠ 是声明,不是定义。即 C 语言中的 extern)
  • 数据类型定义(typedef, struct, union)
  • 函数声明
  • 内联函数定义(⚠ C++ 专属)
  • 模版(template,C++[……]

Read more

C语言中的变长参数

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

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

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

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 及其基本使用
    • &nb[……]

    Read more

    在 emacs 中使用 cscope

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

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

    Read more

    DWM——Linux 上的桌面管理器

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

            对于一些比较老的机器,Linux 发行版也日渐变得庞大和缓慢。在这[……]

    Read more

    用 CodeViz 分析函数调用关系

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

    • 用打过补丁的 gcc 编译源代码
    •         这一步只要在 Makefile 中指定使用编译后的 gcc 而不是系统自带的[……]

    Read more

    编译安装CodeViz

            转载请注明出处

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

    Read more