- 论坛徽章:
- 0
|
写一个程序, 例如a.c, 里边用了宏, 宏在别的目录下的头文件中定义, 用-I指定。
调试时, 发现宏替换存在问题, 于是用cpp查看预处理输出, cpp也接受-I选项, 就象gcc一样。 于是, 故事开始了:
1, cpp -I ../headers/ a.c
问题是, 我一下子忘了敲那个-I选项了!! 于是事实上的命令就是这样:
cpp ../headers/ a.c
输出:cc1: error: headers/: 没有那个文件或目录
2, 我马上意识到自己的错误操作, 更正为:
cpp -I ../headers/ a.c
输出:
[root@localhost ~]# cpp -I ../headers/ a.c
cpp: a.c:没有那个文件或目录
cpp: 没有输入文件
嗯? a.c也不见了? 不可能啊。 ls一下, 嘿, 还真的不见了! 百思不得其解, 用strace跟踪一下cpp ../headers/ a.c,看看它都干了些什么:
3, strace cpp ../headers/ a.c
最后几行的输出:
vfork() = 4450
waitpid(4450, cc1: error: headers/: 没有那个文件或目录
[{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 4450
--- SIGCHLD (Child exited) @ 0 (0) ---
stat64("a.c", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
unlink("a.c") = 0
exit_group(1) = ?
我晕啊, 就算我没加-I, 也不能乱删我文件啊, 可怜我的源程序啊! :em10::em10:
[ 本帖最后由 albcamus 于 2006-2-21 14:55 编辑 ] |
|