相关疑难解决方法(0)

char*envp []是main()可移植的第三个参数

为了在C程序中获取环境变量,可以使用以下内容:

  • getenv()
  • extern char **environ;

但除了上面提到的,使用char *envp[]第三个参数main()来获取环境变量被认为是标准的一部分?

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    while(*envp)
        printf("%s\n",*envp++);
}
Run Code Online (Sandbox Code Playgroud)

char *envp[]便携式?

c environment-variables command-line-arguments

59
推荐指数
4
解决办法
4万
查看次数

C的main()函数的有效签名是什么?

C中主要功能的有效签名究竟是什么?我知道:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

还有其他有效的吗?

c signature entry-point language-lawyer function-prototypes

58
推荐指数
4
解决办法
4万
查看次数

为什么声明main作为数组编译?

在CodeGolf上看到了一段代码,它的目的是作为编译器炸弹,其中main声明为一个巨大的数组.我试过以下(非炸弹)版本:

int main[1] = { 0 };
Run Code Online (Sandbox Code Playgroud)

它似乎在Clang下编译得很好,并且在GCC下只有一个警告:

警告:'main'通常是一个函数[-Wmain]

结果二进制文件当然是垃圾.

但为什么它会编译呢?是否允许C规范?我认为相关的部分说:

5.1.2.2.1程序启动

程序启动时调用的函数名为main.该实现声明此函数没有原型.它应定义为返回类型为int且没有参数[...]或具有两个参数[...]或以某种其他实现定义的方式.

"其他一些实现定义的方式"是否包含全局数组?(在我看来,规范仍然指的是一个函数.)

如果没有,它是编译器扩展吗?或者工具链的一个功能,它可以用于其他目的,他们决定通过前端提供它?

c gcc program-entry-point clang

56
推荐指数
4
解决办法
8999
查看次数

int main()和int main(void)之间的区别?

以下是什么意思:

int main(void) {...} 
Run Code Online (Sandbox Code Playgroud)

VS

int main() {...}
Run Code Online (Sandbox Code Playgroud)

我认为这int main() {...}意味着main不接收任何参数(来自命令行),但是:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

确实.

但这int main(void) {...} 意味着什么?什么是无效主张?

我看过这里,但这是一个不同的问题.

c program-entry-point void

55
推荐指数
3
解决办法
7万
查看次数

void main和int main之间的区别?

我声明我的C++程序的方式有关系吗?

c++ standards

54
推荐指数
6
解决办法
6万
查看次数

为什么int main(){}编译?

(我正在使用Visual C++ 2008)我总是听说main()需要返回一个整数,但是这里我没有放入return 0;并且它编译时出现0错误和0警告!在调试窗口中,它表示程序已经退出代码0.如果此函数被命名为main()以外的任何东西,编译器会抱怨说'blah'必须返回一个值.粘贴a return;也会导致错误出现.但完全不考虑它,它编译得很好.

#include <iostream>
using namespace std;

int main()
{
    cout << "Hey look I'm supposed to return an int but I'm not gonna!\n";
}
Run Code Online (Sandbox Code Playgroud)

这可能是VC++中的一个错误吗?

c++ program-entry-point return-value

36
推荐指数
2
解决办法
9279
查看次数

C中的int main()vs void main()

在C中,我知道int main()返回一个int,其中void main()没有.除此之外,他们之间有区别吗?第一个好于第二个?

c int program-entry-point void

33
推荐指数
2
解决办法
13万
查看次数

ExitCodes大于255,可能吗?

如果是,在哪个操作系统,shell或其他什么?

考虑下面的java程序(我只是以java为例,任何语言对这个问题都有好处,更多的是关于操作系统):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}
Run Code Online (Sandbox Code Playgroud)

在Linux和bash上运行它,它总是返回不等于255的值,例如(echo $?打印上一个执行命令的退出代码)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0
Run Code Online (Sandbox Code Playgroud)

编辑:下面的(只有,到目前为止)答案完全解释了在UNIX上发生的事情.我仍然想知道其他操作系统.

shell operating-system exit-code

32
推荐指数
2
解决办法
1万
查看次数

我们为什么不在main中使用(void)?

人们用 void main() /*empty parens ()*/

我被教过要写 void main(void)

任何想法有什么区别?

c

32
推荐指数
3
解决办法
3万
查看次数

为什么不能推断出主要的返回类型?

正如预期的那样,C++ 11中的以下内容失败,因为该语言没有bog标准函数的返回类型推导:

auto main()
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,C++ 14确实如此,所以我无法解释以下错误(在GCC trunk,clang 3.8和Visual Studio 2015中具有相同的结果):

error: 'main' must return 'int'
Run Code Online (Sandbox Code Playgroud)

我没有看到标准中的一个段落,禁止返回类型扣除main?或者两个编译器都不兼容?

(对于它的价值,我永远不会真的这样做.int main()为了胜利......)

c++ return-type-deduction c++14

32
推荐指数
3
解决办法
1860
查看次数