在许多c++ IDE和编译器中,当它为你生成main函数时,它看起来像这样:
int main(int argc, char *argv[])
当我在没有IDE的情况下编写c++代码时,只是使用命令行编译器,我键入:
int main()
没有任何参数。这意味着什么?它对我的程序至关重要吗?
在许多c++ IDE和编译器中,当它为你生成main函数时,它看起来像这样:
int main(int argc, char *argv[])
当我在没有IDE的情况下编写c++代码时,只是使用命令行编译器,我键入:
int main()
没有任何参数。这意味着什么?它对我的程序至关重要吗?
当前回答
int main();
这是一个简单的声明。它不能接受任何命令行参数。
int main(int argc, char* argv[]);
当程序必须接受命令行参数时,使用此声明。当像这样运行时:
myprogram arg1 arg2 arg3
argc,或参数计数,将被设置为4(四个参数),argv,或参数向量,将被填充为指向"myprogram", "arg1", "arg2"和"arg3"的字符串指针。程序调用(myprogram)包含在参数中!
或者,你可以用:
int main(int argc, char** argv);
这也是成立的。
你可以添加另一个参数:
int main (int argc, char *argv[], char *envp[])
参数envp还包含环境变量。每个条目都遵循以下格式:
VARIABLENAME=VariableValue
是这样的:
SHELL=/bin/bash
环境变量列表以空结尾。
重要提示:不要在调用system()时直接使用任何argv或envp值!这是一个巨大的安全漏洞,因为恶意用户可以将环境变量设置为命令行命令,并(潜在地)造成巨大的破坏。一般来说,不要使用system()。通过C库实现几乎总是有更好的解决方案。
其他回答
这两个
int main(int argc, char *argv[]);
int main();
是C或c++程序入口点的合法定义。Stroustrup: c++风格和技术常见问题解答详细介绍了一些主要函数可能或合法的变化。
第一个参数是提供的参数数量,第二个参数是表示这些参数的字符串列表。
当使用int和char**时,第一个参数将是调用程序的命令数量,第二个参数是所有这些命令
main的参数表示程序启动时提供给程序的命令行参数。argc形参表示命令行参数的数量,char *argv[]是一个字符串数组(字符指针),表示命令行上提供的各个参数。
int main();
这是一个简单的声明。它不能接受任何命令行参数。
int main(int argc, char* argv[]);
当程序必须接受命令行参数时,使用此声明。当像这样运行时:
myprogram arg1 arg2 arg3
argc,或参数计数,将被设置为4(四个参数),argv,或参数向量,将被填充为指向"myprogram", "arg1", "arg2"和"arg3"的字符串指针。程序调用(myprogram)包含在参数中!
或者,你可以用:
int main(int argc, char** argv);
这也是成立的。
你可以添加另一个参数:
int main (int argc, char *argv[], char *envp[])
参数envp还包含环境变量。每个条目都遵循以下格式:
VARIABLENAME=VariableValue
是这样的:
SHELL=/bin/bash
环境变量列表以空结尾。
重要提示:不要在调用system()时直接使用任何argv或envp值!这是一个巨大的安全漏洞,因为恶意用户可以将环境变量设置为命令行命令,并(潜在地)造成巨大的破坏。一般来说,不要使用system()。通过C库实现几乎总是有更好的解决方案。