argc C++中的argv参数(游戏编程)

argc argv parameters in C++ - (games programming)

本文关键字:游戏 编程 参数 C++ 中的 argv argc      更新时间:2023-10-16

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

int main(argc, char *argv[])

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

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

编辑:一年过去了,我觉得很傻,在大学里从来没有真正教过关于cmd行输入的课程(我知道对,我上的是什么课程…):)

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

myapp Drink More Ovaltine

argc将是4,argv将包含程序名称,然后是"Drink",再是"More",最后是"Ovaltine"。

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

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

简称:

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

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

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

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

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

Googlechrome有一个命令行参数--first-run,它强制它重新初始化用户首选项并弹出首次运行设置对话框。如果你碰巧破坏了你的Chrome偏好,这是非常有用的。

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

如果你想不出命令行参数的任何用途,那么就不要使用它。这并不意味着其他人找不到它的用途。

对于各种程序,只需在谷歌上搜索"[程序名称]命令行参数",就可以找出其中的内容(如果有的话)。你会发现,像你这样的人编写的程序无法使用命令行参数,因此这些程序没有任何用途。