【问题标题】:Compile C program with visual studio用 Visual Studio 编译 C 程序
【发布时间】:2012-04-25 23:05:52
【问题描述】:

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

main.c

csapp.c

csapp.h

我在linux中编译如下代码为:

............................. ......

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

那个命令是:gcc main.c csapp.c

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

可以从here 下载该可执行文件(我认为您不需要该文件,而且如果我在您所在的位置,我不会执行该文件)。

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

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

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

也不编译。

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

【问题讨论】:

  • C != C++,他们有不同的编译器。尝试使用 gcc -Wall 进行编译,以启用所有警告。
  • 您可能需要发布编译错误以供人们提供任何具体建议。
  • 源文件:main.c csapp.c;头文件:csapp.h。但我不知道这是否能解决您的问题。
  • 我会考虑学习 GDB,这样你就可以在 Linux 中调试了。
  • 是什么让你认为调试器只存在于 Windows 上?您需要继续使用 gcc 并在 Linux 上使用 gcc 调试器。但如果你想了解代码的作用,第一步就是阅读它。

标签: c visual-studio debugging compilation header-files


【解决方案1】:

如果您查看 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 调试器那么直观,但它可以工作......

【讨论】:

  • 如果我需要了解该程序的作用,我应该怎么做?我猜想将打印消息放到控制台...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多