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

时间:2012-12-02 03:26:52

标签: c++ main argv argc

今晚我必须考虑的另一个“新事物”:

int main(argc, char *argv[])

我看不出为什么我想从cmd线读入,但你永远不知道!为什么我不能只使用getline并将其读入字符串?或者getch如果是其他的话?

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

编辑:回顾这一年我觉得很傻,从来没有真正被教过关于大学课程的cmd线路输入(我知道,我在做什么样的课程......):)< /强>

2 个答案:

答案 0 :(得分:2)

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

myapp Drink More Ovaltine

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

getline只是从输入流中读取数据。它永远不会看到命令行args。 (除非你从argv获得它们并将它们放入stringstream,否则它们就会被提升。即便如此,那又有什么意义呢?)

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

简短版本:

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

正如你现在可以看到的那样,这三种机制完全是分开的,不相关的,而且几乎不能用来代替另一种机制。

答案 1 :(得分:0)

  

作为一名游戏程序员,我无法理解为什么我要从cmd行读入,但你永远不知道!

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

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

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

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

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

对于各种程序,只需谷歌“[程序名称]命令行参数”,找出有什么,如果有的话。您会发现由像您一样的人编写的程序,他们无法想到命令行参数的任何用途,因此程序没有。