你能定义main()来获取多个参数,例如:
int main(int argc1, int argc2, char* argv1[], int* argv2[])
答案 0 :(得分:7)
在C中,main
的唯一便携式定义是:
int main(void) { /* ... */ }
和
int main(int argc, char *argv[]) { /* ... */ }
或同等学历。允许使用其他实现定义的表单 - 但是作为术语"实现定义的"暗示,如果你的编译器选择允许,他们只允许 。
有一些常见的扩展名,例如:
int main(int argc, char *argv[], char *envp[]) { /* ... */ }
但我怀疑任何编译器都支持您建议的特定表单。我不确定它会如何有用;现有的argc
/ argv
表单允许任意多个命令行参数。
C ++与C略有不同,因为它要求返回类型为int
;在C中,编译器可以但不必允许其他返回类型。此外,在C ++中()
意味着函数没有参数,相当于C (void)
。 (C ++也允许(void)
C兼容。)
答案 1 :(得分:1)
您的编译器可以决定允许main
的签名(和返回类型),以及程序对每个签名的行为。请查阅其文档以了解相关信息。
所有编译器必须支持的唯一签名是两个标准签名(和等效的):
int main(void)
int main(int, char **)
答案 2 :(得分:1)
[basic.start.main] / 2:
实现不应预定义
main
函数。这个 功能不得超载。它应具有声明的返回类型 int类型,但其类型是实现定义的。一个 实施应允许两者
- ()返回
的函数int
和(int
的函数,指针指向char)
的指针返回int
作为
main
的类型(8.3.5)。
理论上,一个实现可以允许问题中提到的签名 - 但它将是非常荒谬的,似乎没有相关的编译器支持它。 (它会通过什么?)
虽然有main
的某些签名确实得到支持且未被标准涵盖,例如:
int main( int, char**, char** )
答案 3 :(得分:0)
是的,你可以任意方式拥有main
功能签名;但它不会是标准的。
您必须更改编译器才能接受新的声明。并为它发出适当的代码。
您可能需要更改操作系统才能将用户的参数正确传递给您的程序。
同样,是的,其他声明可能,但它们不是标准的,需要修改操作系统和工具链。