1

我需要解释位于以下链接中的程序的作用:

主程序

csapp.c

csapp.h

我在linux中将以下代码编译为:

.................................................................. 在此处输入图像描述_ …………

(请注意,所有三个文件都必须位于同一工作目录中才能进行编译。)

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

当我执行该命令时,我得到了可执行文件: a.out 并且没有编译错误!

可以从此处下载该可执行文件(我认为您不需要该文件,而且如果您在哪里,我将不会执行该文件)。

无论如何,我认为如果我可以调试程序,我将能够更好地理解发生了什么。结果,我在 Visual Studio 中创建了一个 C++ 控制台空控制台项目。我希望在其中包含相同的文件并能够编译它。我以前从未使用过 c++,而且我真的不明白在哪里放置头文件。这就是我所做的希望能够编译程序:

在此处输入图像描述

如果我这样放置文件,程序将无法编译。

我也尝试将所有文​​件放在同一个目录中,就像在 linux 虚拟机上一样:

在此处输入图像描述

那也不编译。

我将如何使用 Visual Studio 编译该程序?

4

1 回答 1

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)。您将无法在 Windows 或 Visual Studio 中使用这些库,除非您正在做一些不寻常的事情,例如针对Cygwin库进行编译。

如果你想了解程序在做什么,你可以做很多事情。首先,只需通读代码并在记录这些函数的手册页中查找它调用的函数(如果你有 gcc,我猜你也有 man 吗?)其次,是的,你可以打印到控制台来弄清楚。你也可以使用像 gdb 这样的调试器来单步调试程序,它不像 VS 调试器那么直观,但它可以工作......

于 2012-04-25T23:11:30.130 回答