URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 19 » 我晕, cpp预处理这是那门子机制删文件啊?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
我晕, cpp预处理这是那门子机制删文件啊?
 
 
 
 
Subject: 我晕, cpp预处理这是那门子机制删文件啊?
Author: albcamus    Posted: 2006-02-21 15:50    Length: 1,603 byte(s)
[Original] [Print] [Top]
写一个程序, 例如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, 也不能乱删我文件啊, 可怜我的源程序啊!

想知道cpp这么做的理由是什么, 为什么如果第一个参数不存在, 就要无条件删除第二个?
郁闷啊
----
屠龙有技无人赏。
[Original] [Print] [Top]
Subject: Re: 我晕, cpp预处理这是那门子机制删文件啊?
Author: zuland    Posted: 2006-02-21 16:27    Length: 30 byte(s)
[Original] [Print] [Top]
只有请上帝保佑恢复被删的文件了
----
我国IT界已经集体补过钙了
[Original] [Print] [Top]
Subject: Re: 我晕, cpp预处理这是那门子机制删文件啊?
Author: nxin    Posted: 2006-02-21 19:24    Length: 609 byte(s)
[Original] [Print] [Top]
同情,请看下面的手册。cpp是很老的命令了,确实存在问题,现在一般用gcc -E代替,比较安全,不会出你那种情况。

NAME
cpp - The C Preprocessor

SYNOPSIS
cpp [-Dmacro[=defn]...] [-Umacro]
[-Idir...] [-Wwarn...]
[-M|-MM] [-MG] [-MF filename]
[-MP] [-MQ target...]
[-MT target...]
[-P] [-fno-working-directory]
[-x language] [-std=standard]
infile outfile
[Original] [Print] [Top]
Subject: Re: 我晕, cpp预处理这是那门子机制删文件啊?
Author: albcamus    Posted: 2006-02-22 09:58    Length: 216 byte(s)
[Original] [Print] [Top]
谢谢二位!
我的代码是从CVS下载了还没改动多少, 倒是没事儿。 昨天又看了遍《Unix痛恨者手册》,象rm *>o之类,说的真经典
----
屠龙有技无人赏。
[Original] [Print] [Top]
« Previous thread
编程的时候用什么命令区分linux的版本阿 ?
C/C++编程版
19
Next thread »
daemon()后的程序如何使用printf
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:19, cost 0.038245916366577 ms.