【发布时间】:2016-01-23 20:50:09
【问题描述】:
案例 1:
void hello(void) {
//something
}
int main()
{
hello(1); //error
return 0;
}
案例 2:
int main(void) {
//something
return 0;
}
执行:
./a.out something something //No error, Why?
为什么没有错误? main 将无法接受任何参数。那么为什么可以从命令行提供参数呢?
【问题讨论】:
-
为什么会出现错误?
-
@OliverCharlesworth 因为我们将参数传递给 main?编译器没有出现,但在运行时/加载时为什么没有错误?
-
shell 总是 将它的参数发送给程序——即使你没有提供任何参数(通常它发送
argv[0])。main和hello不是同一种函数。 -
我也有兴趣听到答案。运行时中必须有一些东西用这些参数调用 main 。那么为什么当你定义一个偏离标准的 main 时没有链接器错误呢? (即使
main(float)只生成一个警告,没有错误。而且只有 -Wall 甚至。) -
出于好奇,我做了一个小实验。我编译了两次相同的程序,一次使用不同的签名。 (如果您有兴趣,VS2013,因为这是我手头的。)忽略调试信息和时间戳,两个生成的文件完全相同,精确到字节。这向我表明编译器要么用标准签名替换 void 签名(这根本不会改变你的程序),要么足够聪明,知道如果你不使用 args 也没关系。 (当然,我们希望编译器知道这一点。:))
标签: c command-line-arguments main