我用编译器重写了我的.c文件。我能取回它吗?

我用编译器重写了我的.c文件。我能取回它吗?,c,unix,C,Unix,我正在做一个学校的项目。不幸的是,我只是运行了这样一个编译:gcc-o file.c file.o 我忘了输入输出的可执行文件名,现在我以前的C文件不见了。有办法取回这个文件吗?我写了很多已经过时的代码 程序是用C语言在Unix服务器上编写的 谢谢大家! 如果编辑器保存了临时文件,它们可能仍然存在。在unix下,文件本身不存在。这个问题很快就会出现,因为它超出了StackOverflow的范围 我认为(正如Caleb在我打字时所观察到的那样),您学到了使用源代码管理和定期签入的许多好理由之一

我正在做一个学校的项目。不幸的是,我只是运行了这样一个编译:gcc-o file.c file.o

我忘了输入输出的可执行文件名,现在我以前的C文件不见了。有办法取回这个文件吗?我写了很多已经过时的代码

程序是用C语言在Unix服务器上编写的


谢谢大家!

如果编辑器保存了临时文件,它们可能仍然存在。在unix下,文件本身不存在。这个问题很快就会出现,因为它超出了StackOverflow的范围

我认为(正如Caleb在我打字时所观察到的那样),您学到了使用源代码管理和定期签入的许多好理由之一


以下是将错误代码编译到错误文件时发生的情况:

~ mgregory$ cat > foo.h
bad code
~ mgregory$ cat > foo.c
test text
~ mgregory$ gcc -o foo.c foo.h
foo.h:1:1: error: unknown type name 'bad'
bad code
^
foo.h:1:9: error: expected ';' after top level declarator
bad code
        ^
        ;
2 errors generated.
~ mgregory$ ls -l foo.c
ls: foo.c: No such file or directory
~ mgregory$ 

如果编辑器保存了临时文件,它们可能仍然存在。在unix下,文件本身不存在。这个问题很快就会出现,因为它超出了StackOverflow的范围

我认为(正如Caleb在我打字时所观察到的那样),您学到了使用源代码管理和定期签入的许多好理由之一


以下是将错误代码编译到错误文件时发生的情况:

~ mgregory$ cat > foo.h
bad code
~ mgregory$ cat > foo.c
test text
~ mgregory$ gcc -o foo.c foo.h
foo.h:1:1: error: unknown type name 'bad'
bad code
^
foo.h:1:9: error: expected ';' after top level declarator
bad code
        ^
        ;
2 errors generated.
~ mgregory$ ls -l foo.c
ls: foo.c: No such file or directory
~ mgregory$ 
有办法取回这个文件吗

如果您正在使用版本控制系统或进行备份,则会出现此问题。如果不是,你很可能就不走运了

有办法取回这个文件吗


如果您正在使用版本控制系统或进行备份,则会出现此问题。如果没有,您可能会运气不佳。

通常不可能取回文件(但详细信息是痛苦的操作系统和特定的;如果在Linux笔记本电脑上的Ext4文件系统上,您可以尝试从中获取
debugfs
)。你显然有备份,所以使用它们(如果你没有,你痛苦地学到了一些重要的东西,我们大多数人在生命的早期也犯了同样的错误,所以不要太羞愧)

是时候让你了解什么是系统了。因此,请阅读并学习如何使用它

如果您的软件具有许可证,您甚至可以使用(或类似的东西)作为存储库

您可以运行
file file.c
ls-l file.c
stat file.c
来了解
file.c
中的内容。您可以使用
ls-alst

顺便说一句,你应该用

gcc -Wall -Wextra -g file.c -o prog
这要求使用
-Wall
发出所有警告,其中更多警告使用
-Wextra
,调试信息使用
-g
。然后您可以在程序上使用
gdb
调试器作为
gdb prog

顺便说一句,您可能需要一个
Makefile
,只需键入
make
即可编译程序。是
Makefile
的一个简单示例


请注意,最近的GCC能够处理(但对于小型学校项目来说,它不是一个非常有用的功能)。如果您键入了
gcc-o file.c file.h
,则很可能您的头文件
file.h
已预编译到
file.c

中,通常无法取回文件(但详细信息是痛苦的操作系统和特定的;如果在Linux笔记本电脑上的Ext4文件系统上,您可以尝试使用
debugfs
)。你显然有备份,所以使用它们(如果你没有,你痛苦地学到了一些重要的东西,我们大多数人在生命的早期也犯了同样的错误,所以不要太羞愧)

是时候让你了解什么是系统了。因此,请阅读并学习如何使用它

如果您的软件具有许可证,您甚至可以使用(或类似的东西)作为存储库

您可以运行
file file.c
ls-l file.c
stat file.c
来了解
file.c
中的内容。您可以使用
ls-alst

顺便说一句,你应该用

gcc -Wall -Wextra -g file.c -o prog
这要求使用
-Wall
发出所有警告,其中更多警告使用
-Wextra
,调试信息使用
-g
。然后您可以在程序上使用
gdb
调试器作为
gdb prog

顺便说一句,您可能需要一个
Makefile
,只需键入
make
即可编译程序。是
Makefile
的一个简单示例


请注意,最近的GCC能够处理(但对于小型学校项目来说,它不是一个非常有用的功能)。如果您键入了
gcc-o file.c file.h
,则很可能您的头文件
file.h
已预编译到
file.c

中。请注意,这与c本身无关。您使用的是gedit吗?查找tilda文件,例如~file.cNote,它本身与C无关。您使用的是gedit吗?查找tilda文件,例如~file.cI我想我真正的问题是:当您使用gcc-o file.c file.h时会发生什么?它是否创建了一个名称为空的可执行文件?我很困惑,因为文件.c完全不可显示。我只是尝试确认:如果您的编译由于错误而失败(很可能是您试图编译没有.c文件的头文件),那么目标文件将被删除。这是有意义的:它可以防止您运行从旧版本代码生成的“旧”目标文件,而忽略当前版本代码不编译的事实。很高兴知道。这是一个艰难的教训,但这是一次积极的经历,原因有二。1.我学会了总是使用版本控制。2.我确信我理解了我的作业,因为我能够相当快地重写程序。事实上,这通常是正确的:在你第一次写东西后,第二次写东西要快得多。任何使用微软工具的人都可能在某个时候经历过这种情况。。。。我想我真正的问题是:当您使用gcc-o file.c file.h时会发生什么?它是否创建了一个名称为空的可执行文件