main()在C和C++中定义函数的正确(最有效)方法是什么- int main()或void main()- 为什么?如果int main()那么return 1或return 0?
这个问题有很多重复,包括:
main()函数的有效签名是什么?main()函数void main()和int main()?main()在C++中的签名main()? - 对于C++,确实有一个非常好的答案.main()C语言中的函数样式main()C中的方法类型int main()vs void main()在C中有关:
每个程序都从main(int argc, char *argv[])定义开始.
我不明白这意味着什么.如果我们在程序中不使用这些参数,有人可以解释为什么我们会使用这些参数,我会很高兴的吗?为什么不int main()呢:?
程序的名称是其中的一个元素,*argv[]并且argc是参数个数的计数*argv[]?发送到的其他参数是*argv[]什么?我们如何发送它们?
C中主要功能的有效签名究竟是什么?我知道:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
还有其他有效的吗?
我们可以在C中获取环境变量,如下所示:
extern char **environ;
int main(int argc, char *argv[])
{
int count = 0;
printf("\n");
while(environ[count] != NULL)
{
printf("[%s] :: ", environ[count]);
count++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但环境的定义在哪里?我在unistd.h中找不到.它是如何工作的?
我之前遇到过这样的函数:
int main(int argc, char **argv, char **argw){
}
Run Code Online (Sandbox Code Playgroud)
为什么需要三个参数,这实际上是如何工作的?
我已经明白这char **envp是第三个参数main,并且在下面的代码的帮助下,我能够看到它实际包含的内容.
int main(int argc, char *argv[], char *env[])
{
int i;
for (i=0 ; env[i] ; i++)
std::cout << env[i] << std::endl;
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么(在什么情况下)程序员需要使用它?我发现了很多解释什么这个说法呢,但没有什么能告诉我在那里,这是通常使用的.试图了解这可能会使用哪种现实世界的情况.
标准说:
5.1.2.2.1程序启动
程序启动时调用的函数名为main.该实现声明此函数没有原型.它应该使用返回类型int并且没有参数来定义:int main(void){/*...*/}或者有两个参数(这里称为argc和argv,尽管可以使用任何名称,如它们是声明它们的函数的本地函数):int main(int argc,char argv []){/ ...*/}或等价物; 10)或以某种其他实现定义的方式.
如果我写这个:
#include <stdio.h>
struct some_struct
{
int i;
};
float main(struct some_struct s)
{
printf("Why does this main get called?\n");
}
Run Code Online (Sandbox Code Playgroud)
实际上,正如我所见,它被任何原型调用,并且没有任何运行时错误.
为什么不禁止它?这没有理由吗?另外,如果签名错误,如何调用它?
我用过 gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
我想知道缩写envp代表什么,例如这里:
int main(int argc, char **argv, char **envp);
Run Code Online (Sandbox Code Playgroud)
我也想知道vinargv最初代表什么。是v为了“价值”吗?或者也许是“矢量”?
当我运行这个没有任何输入的程序时,我得到了一个奇怪的字符串,用于我的argv [2].为什么不是argv [2]未定义?TERM_PROGRAM=Apple_T< - 这就是我得到的.我想知道这是否与在mac上运行它有关?
if(argv[2]) {
sscanf(argv[2], "%lf", &argWind);
sscanf(argv[2], "%20s", str);
sprintf(str2, "%lf", argWind);
printf("String: %s, %lf", str, argWind);
int len;
len = strlen(str);
str2[len] = '\0';
if(strcmp(str, str2)){
printf("\nError: you entered a non-numeric entry for wind speed\n");
return 0;
}
}
Run Code Online (Sandbox Code Playgroud) c ×8
c++ ×4
argv ×2
abbreviation ×1
argc ×1
entry-point ×1
linux ×1
return-type ×1
return-value ×1
signature ×1