C - 程序编译,但无法提供参数

时间:2013-10-01 17:54:02

标签: c shell

我在Mac上,在终端我正在编译我的程序

    gcc -Wall -g -o example example.c

它编译(没有错误),但是当我尝试提供命令行参数时

   example 5 hello how are you

终端以“-bash:example:command not found”

响应

如何在编译后提供我想提供的参数?

3 个答案:

答案 0 :(得分:5)

使用路径运行它:

   ./example 5 hello how are you

除非example二进制文件所在的目录是PATH变量的一部分,否则即使您运行的二进制文件位于当前目录中,您所拥有的内容也将无效。

答案 1 :(得分:5)

这不是编译问题,而是shell的问题。当前目录不在PATH中(请查看echo $PATH并使用which了解shell如何将其用于某些特定程序,例如which gcc)。

我建议使用程序的显式文件路径测试程序,如

./example 5 hello how are you

您可以修改~/.bashrc以在.的末尾添加PATH。有pro和conses(特别是一些可能的安全问题,如果你的当前目录有时是"恶意"可能是/tmp可能是:坏人可能会放置{{1}这是gcc的符号链接,因此如果您这样做,则需要在/bin/rm的末尾添加.

不要忘记学习如何使用调试器(如PATH)。在C(或C ++)中编码时,此技能至关重要。也许还要考虑升级你的gdb(Apple不要及其目前的GPLv3许可证,所以不要分发最近的许可证;只需gcc并注意最新的released GCC今天是4.8.1)。

答案 2 :(得分:1)

./example 5 Hello how are you是您正在寻找的语法。

This article提供了一个很好的解释,说明为什么这很重要。

基本上,当你点击Enter时,shell会检查第一组字符是否是绝对路径。如果不是,它会检查PATH变量以查找具有您尝试运行的命令名称的可执行文件。如果它被发现,它将被运行,否则它将崩溃并燃烧,你会变得非常难过。