你能定义 main() 来接受不仅仅是 argc/argv 参数吗?
Can you define main() to take in more than argc/argv arguments?
你能定义main()来接受多个参数吗,例如:
int main(int argc1, int argc2, char* argv1[], int* argv2[])
在 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中,编译器可以,但不需要,允许其他返回类型。此外,In C++ ()
表示函数没有参数,相当于 C 的(void)
。(C++还允许(void)
C 兼容性。
编译器可以决定允许哪些签名(和返回类型)main
,以及每个签名的程序行为。请参阅其文档以了解此问题。
所有编译器必须支持的唯一签名是两个标准签名(和等效签名):
int main(void)
int main(int, char **)
是的,你可以以任何你想要的方式拥有main
函数签名;但它不是标准的。
您必须更改编译器以接受新声明。并为其发出正确的代码。
您可能需要更改操作系统才能将参数从用户正确传递到您的程序。
同样,是的,其他声明是可能的,但它们不是标准的,需要修改操作系统和工具链。
[basic.start.main]/2:
实现不应预定义
main
函数。这 功能不得过载。它应具有声明的返回类型 类型为 int,但除此之外,其类型是实现定义的。一 实施应允许两者
- () 返回
int
和(int
的函数,指针指向返回char)
int
作为
main
的类型 (8.3.5)。
从理论上讲,实现可以允许问题中提到的签名 - 但这是非常荒谬的,而且似乎没有相关的编译器支持它。(它会通过什么?
尽管确实支持某些main
签名并且未被标准涵盖,例如:
int main( int, char**, char** )
相关文章:
- 为什么这个案例陈述需要一个"if else"而不仅仅是一个"if"?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 为什么我们要做"INT_MAX/10"而不仅仅是INT_MAX?
- 为什么 std::vector 需要 is_trivial 才能按位移动,而不仅仅是is_trivially_copya
- 为什么在这个C++问题中使用const_iterator而不仅仅是迭代器?
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 为什么我们必须在 C++ 中释放数组数组,而不仅仅是整个"matrix"
- 十进制文字不仅仅是LONG_LONG_MAX
- 为什么非放置"新建"和"删除"内置于语言中,而不仅仅是常规函数?
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- 这是循环击中两个输出,而不仅仅是我期望的输出
- 在C++中,是否有任何理由生成并立即加入线程,而不仅仅是直接调用函数?
- 如何正确抛出一个需要的不仅仅是构造函数的异常
- 为什么 cppreference 将type_traits xxx_v快捷方式定义为内联 constexpr,而不仅仅是
- C++Qt创建者,我可以评论每一行,而不仅仅是评论选择
- 为什么BOOST.PROGROGROGOTIONS不仅仅是标头
- 使用FP:快速导致错误的VC 结果(不仅仅是不准确)结果 - 这是编译器错误
- 你能定义 main() 来接受不仅仅是 argc/argv 参数吗?