【问题标题】:argc argv parameters in C++ - (games programming)C++ 中的 argc argv 参数 - (游戏编程)
【发布时间】:2012-11-19 21:48:11
【问题描述】:

今晚我不得不考虑的另一件“新”事情:

int main(argc, char *argv[])

我不明白为什么要从 cmd 行读取,但你永远不知道!为什么我不直接使用getline 并将其读入字符串?或者getch 如果是别的东西?

我怀疑答案与要处理的代码量有关 - 在 #include <string> 上使用这样的东西肯定会使用更少的计算能力,对吗?

编辑:回顾这一年我觉得很傻,在大学里从来没有真正教过关于命令行输入的课程(我知道,我在上什么样的课程..):)

【问题讨论】:

    标签: c++ main argv argc


    【解决方案1】:

    argcargv 与标准输入和输出无关。如果我说

    myapp Drink More Ovaltine
    

    argc 将是 4,argv 将包含程序的名称,然后是“Drink”,然后是“More”,然后是“Ovaltine”。

    getline 只是从输入流中读取数据。它永远不会看到命令行参数。 (无论如何,除非你从argv 得到它们并将它们放入stringstream 中。即便如此,还有什么意义?)

    至于#include,它也与运行时 I/O 无关。它用于告诉编译器(或者通常是预处理器)在编译期间包含一个 C 源文件。您不能只是#include 任意二进制文件或其他东西。 (包含完成后,生成的一堆字符必须形成有效的 C++ 代码)。到运行时,文件已经被包含——到运行时,应用程序甚至不知道该文件存在,因此甚至不会考虑读取它。

    短版:

    • argvargc 用于访问用于启动应用程序的命令行中的内容。它根本与 I/O 无关。
    • getline 用于运行时的流输入,并且可以读取几乎任何文件。
    • #include用于编译时插入C++代码,只能真正用于源代码。

    正如您现在所希望看到的,这三种机制是完全独立且不相关的,几乎永远不能用一种机制代替另一种。

    【讨论】:

    • 是的,我提到的#include 完全被误读了,因为它在之后错过了“字符串”,对不起!我按照你的意思,一个是运行时,一个是启动时。干杯,但是在启动我的应用程序时我会读到什么东西?请原谅这里显示的nooby知识,但我没有在启动前直接写入cmd行;当我打开它时,您是否建议 .exe 写入 CMD?只是想了解一下,谢谢:)
    • .exe 接收您输入的行以运行它(或您使用的快捷方式中的行),并将其每一部分放入argv。而已。对于游戏,您实际上并不需要使用它,但您可以使用该信息来启用特殊调试内容或备用 API(OpenGL?)或任何您想要的。这完全取决于你。至于您在启动应用程序...配置文件时会读到什么?地图文件?纹理?等
    【解决方案2】:

    作为一名游戏程序员,我不明白为什么要从 cmd 行读取,但你永远不知道!

    通常,对于 GUI 程序,通过命令行传入的东西往往是隐藏或调试选项。

    例如,IE 有一个-k 命令行开关,无法在普通首选项中设置。该开关使 IE 在 kiosk 模式下运行,并禁用了很多东西。这是普通用户不应该做的事情,因为如果您在 kiosk 模式下运行 IE,您将无法访问任何其他内容(就像将 Windows 变成 MsIeOS)。

    Google chrome 有一个命令行参数--first-run,它强制它重新初始化用户首选项并弹出第一个运行设置对话框。如果您碰巧损坏了 Chrome 偏好设置,这将非常有用。

    游戏类似。 Halo2 有一个-windowed 命令行参数,可以在窗口而不是全屏中启动游戏。以下是 Halo2 命令行参数列表:http://support.microsoft.com/kb/830487

    如果您想不出任何使用命令行参数的方法,请不要使用它。这并不意味着其他人找不到它的用途。

    对于各种程序,只需谷歌“[程序名称]命令行参数”即可找出有哪些(如果有)。你会发现那些和你一样想不出命令行参数有什么用的人编写的程序,所以这些程序没有任何用处。

    【讨论】:

    • 出色的答案,谢谢!我知道其他人会使用它,只是无法弄清楚我必须在哪里使用它。但这解释了很多 - 谢谢。
    猜你喜欢
    • 2020-06-26
    • 2017-08-10
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2011-04-15
    • 2020-10-12
    相关资源
    最近更新 更多