苹果对头文件开刀了?我也来!
不知道网上是不是已经有了现成的解决方案,就是比如我在写C/C++程序的时候,
不想自己动手写 #include <stdio.h>
等头文件的包含。这个实在是太笨了,
每次我都需要自己用man手册看一下,比如malloc()函数到底是哪个头文件声明它
的,然后将其include进来。
其实这个东西很好自动化嘛。拿g++(比gcc更严格一些,基本又向下兼容gcc)编
译一遍,把未声明而出错的所有函数都grep出来,然后挨个man 2(系统调用)或
者man 3(标准库),把 #include
给抽出来插进去,不就解决了吗?
当然,苹果对头文件开的刀是解决另一个问题(头文件的重复编译引起的编译性 能差),我这是标题党了一把:-)
给定这样一个 stack-order.c 文件:
int main(int argc, char* argv[]) { printf("hello world\n"); malloc(); }
拿这个 c-get-includes 跑下: c-get-includes stack-order.c
,结果如下:
#include <stdarg.h> #include <stdio.h> #include <stdlib.h>
其中stdarg.h是躺枪了,printf的man手册里也有vprintf,而后者的头文件正是 stdarg.h,但这并不影响大局嘛!除了编译性能:-)
再加上一小段 emacs-lisp代码 和一个快捷键设置,只要按一个键上面的c文件就 能拥有正确的头文件了!
/**** start of bhj auto includes ****/ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> /**** end of bhj auto includes ****/ int main(int argc, char* argv[]) { printf("hello world\n"); malloc(); }