2015-05-19 31 views
-1

我正在學校項目上工作。不幸的是,我只是跑了一個像這樣的編譯:gcc -o file.c file.o我用編譯覆蓋了我的.c文件。我可以拿回來嗎?

我忘了把輸出的可執行文件的名稱,現在我以前的C文件不見了。有沒有辦法讓這個文件回來?我寫了很多代碼不見了。

程序寫在C的Unix服務器上。

謝謝!

+0

請注意,這與C本身無關。 – immibis

+0

http://stackoverflow.com/questions/2346754/getting-source-from-object-file –

+0

你使用gedit?尋找tilda文件例如〜file.c – samgak

回答

1

如果你的編輯器保存了臨時文件,他們可能仍然在那裏。在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$ 
+0

我想我真正的問題是這樣的:當你gcc -o file.c file.h時會發生什麼?它創建了一個空白名稱的可執行文件嗎?我很困惑,因爲file.c被完全廢棄 – user3842643

+0

我剛剛試驗證實:如果編譯因錯誤而失敗(很可能如果您嘗試編譯沒有.c文件的頭文件),那麼目標文件將被刪除。這是有道理的:它會阻止你運行從舊版本的代碼生成的「舊」目標文件,忽略了當前版本的代碼無法編譯的事實 – GreenAsJade

+1

有趣。很高興知道。經驗豐富的教訓,但這是一個積極的經驗,有兩個原因。我學會了總是使用版本控制。我確信我理解我的任務,因爲我能夠很快地重寫這個程序。 – user3842643

4

有沒有辦法讓這個文件回來?

如果您正在使用版本控制系統或進行備份,如果不是的話,你很可能不走運。

0

通常不可能找回一個文件(但細節是痛苦的操作系統和file system具體;如果您的Linux筆記本上的Ext4文件系統,你可以嘗試從e2fsprogsdebugfs)。你顯然有備份,所以使用它們(如果你不這樣做,你會痛苦地學到一些重要的東西,而且我們大多數人在我們生命的早期就犯了同樣的錯誤,所以不要太過羞愧)。

您現在該瞭解什麼是version control系統。所以請閱讀git並學會使用它。

如果您的軟件具有free software許可證,您甚至可以使用http://github.com/(或其他類似http://gitlab.com/)作爲存儲庫。

您可能會遇到file file.cls -l file.cstat file.c獲得的裏面是什麼file.c的想法。你可能會列出最近修改的文件與ls -alst

BTW,你應該編譯程序與

gcc -Wall -Wextra -g file.c -o prog 

此要求與-Wall所有警告,甚至更多的人與-Wextra,與-g調試信息。然後你可以使用gdb調試器上的程序作爲gdb prog

順便說一句,你可能希望有一個GNU makeMakefile只需鍵入make編譯程序。 Here是一個簡單的例子Makefile

請注意,最近海灣合作委員會能夠處理pre-compiled headers(但它不是一個小型學校項目非常有用的功能)。如果您輸入gcc -o file.c file.h,您的頭文件file.h可能已預編譯爲file.c

+0

出於好奇,你知道當你像這樣編譯時會發生什麼:gcc -o file.c file.h.我認爲它會用可執行文件覆蓋我的c文件,但c文件完全消失。在這一點上,我只是好奇。 – user3842643

+0

你編譯過'file.h'還是'file.o'? –

+0

該命令是:gcc -o file.c file.h(我忘了提供可執行文件的名字) – user3842643

相關問題