2012-04-25 137 views
1

我需要解釋一下位於以下鏈接程序的作用:與Visual Studio編譯C程序

main.c

csapp.c

csapp.h

我編譯在Linux下面的代碼爲:

................................. enter image description here ...........................

(注意,所有三個文件必須位於相同的工作目錄才能編譯才能工作。 )

該命令是:gcc main.c csapp.c

當我執行該命令我得到的可執行文件:a.out和我沒有得到任何編譯錯誤!

該可執行文件可以從here下載(我不認爲你需要這個文件加上我不會執行該文件,如果我在哪裏你)。

無論如何,我認爲如果我可以調試程序,我將能夠更好地理解發生了什麼。因此我在Visual Studio中創建了一個C++控制檯空白控制檯項目。我希望在那裏包含相同的文件並能夠編譯它。我以前從未使用過C++,而且我也不知道放置頭文件的位置。這就是我所做的一切希望能夠編譯程序:如果我把這樣的文件

enter image description here

程序將無法編譯。

我也曾嘗試把所有的文件在同一目錄就像Linux虛擬機上:

enter image description here

不編譯任。

我將如何使用visual studio編譯該程序?

+2

C!= C++,它們有不同的編譯器。嘗試使用gcc -Wall進行編譯,以啓用所有警告。 – jordanm 2012-04-25 23:07:48

+1

您可能需要發佈編譯錯誤以供人們提供任何具體建議。 – sheepez 2012-04-25 23:07:52

+0

源文件:main.c **和** csapp.c;頭文件:csapp.h。但我不知道這是否能解決您的問題。 – pmg 2012-04-25 23:10:31

回答

3

如果你看看csapp.h你會發現它會嘗試包括這些標題:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <ctype.h> 
#include <setjmp.h> 
#include <signal.h> 
#include <sys/time.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <sys/mman.h> 
#include <errno.h> 
#include <math.h> 
#include <pthread.h> 
#include <semaphore.h> 
#include <sys/socket.h> 
#include <netdb.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 

有些是性病C頭文件,但其他特定於POSIX/Linux/UNIX的風格操作系統(例如pthread.h)。你將不能夠除非你做一些不尋常的如編譯反對Cygwin庫上使用Windows或在Visual Studio這些庫。

如果你想了解程序的功能,你可以做很多事情。首先,僅僅通過代碼閱讀,並期待它在記錄這些函數的man頁面調用函數(如果你有gcc的,我想你也有男人嗎?)第二,是的,你可以打印到控制檯來計算的東西了。你也可以使用像gdb這樣的調試器來執行程序,它不像VS調試器那麼直觀,但它可以工作...

+0

如果我需要了解該程序該怎麼做?我想把地方打印信息發送到控制檯... – 2012-04-25 23:13:57

+2

使用源代碼,盧克。 – liamf 2012-04-25 23:15:22