相关疑难解决方法(0)

void main的起源是什么?

我经常看到void main()论坛周围的臭名昭着,几乎立即发出评论,告诉用户永远不要使用void main()(我完全同意).但它的起源在void main()哪里?

为什么我仍然看到较新的人养成了main在正确的方式返回时没有任何回报的坏习惯int.我理解为什么这个方法是错误的,正如这个问题和众多其他人所解释的那样,但我不知道这种宣告方法main是如何产生的,甚至不是为什么它仍然教给一些学生.

c++

17
推荐指数
2
解决办法
1183
查看次数

将main声明为extern"C"是合法的C++吗?

作为一个低级程序员,我经常使用可执行文件的模块启动代码,所以我很清楚像"crt0"这样的代码是如何工作的.当编写C++代码,我通常声明mainextern "C"以匹配C启动代码会做打电话main.因此我通常使用此声明main(wmain如果专门针对Windows):

extern "C" int main(int argv, const char *const *argv)

extern "C" int __cdecl wmain(int argv, const wchar_t *const *argv)
Run Code Online (Sandbox Code Playgroud)

它是合法使用extern "C"main?此外,const char *const *argv的类型是合法的,而不是char *[]

c++ program-entry-point extern linkage

17
推荐指数
2
解决办法
2699
查看次数

为什么没有return语句的main函数返回值12?

我写了一个打印表格的程序.我没有在main函数中包含返回语法,但每当我输入echo $时仍然如此?它显示12.

我的源代码:

#include <stdio.h>


int main(void)
{
    int ans,i,n;
    printf("enter the no. : ");
    scanf("%d",&n);

    for(i=1;i<=10;i++)
    {
        ans = n*i;
        printf("%d * %d = %d\n",n,i,ans);
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有写回12,但每次执行程序时它仍返回12.

谢谢.

c linux unspecified-behavior

16
推荐指数
2
解决办法
3534
查看次数

为什么C和c ++中的main函数的类型留给用户定义?

为什么main()用户定义了功能?

我什么时候会使用void main()int main()

c c++ program-entry-point

16
推荐指数
4
解决办法
7921
查看次数

为什么void main()如此受欢迎?

在C89/C99/C11中,在独立环境中,入口点功能是实现定义的.在托管环境中,它必须int main符合严格的程序.大多数现代编译器都会void main出错.但是,我看到很多用户使用void main.即使在不合格的编译器中允许它,为什么要使用它?我认为没有任何实际理由void main可以优先考虑int main.即使在C89中,它也是未定义的行为return.

是否有人气的历史原因void main

我不相信我的问题主要是基于意见的.一些有效的想法已经在这个帖子中提出过,例如微软的void main扩展,以及Window的受欢迎程度,以及它是C书重印不正确信息的结果.这些是客观和历史原因.

c standards program-entry-point

16
推荐指数
2
解决办法
687
查看次数

在C89(又名ANSI C)中省略return语句未定义的行为?

考虑以下基本示例:

#include <stdio.h>

int main(void)
{
    printf("Hi there!\n");
}
Run Code Online (Sandbox Code Playgroud)

它是否在C89中调用未定义的行为?我试图从这个问题中得到一些意义,但是大多数赞成的答案声称它是实现定义的,绝对没有UB(与Keith Thompson的评论,看起来相互矛盾).

规范在§3.16 定义和惯例中说明:

如果违反约束之外出现的"应"或"不应"要求.行为未定义.未定义的行为在本国际标准中以"未定义的行为" 或省略任何明确的行为定义来表示.这三者之间的重点没有区别:它们都描述了"未定义的行为".

和§5.1.2.2.3 程序终止:

从初始调用到main函数的返回等效于使用exit函数返回的值main作为其参数调用函数.如果main函数执行不指定值的返回,则返回到主机环境的终止状态是未定义的.

我的理解是,后面的子条款不包括丢失返回的情况,因为return声明从未被调用过,因此以前的子条款适用.

然而futher读数表明不同的东西,§6.6.6.4 return声明:

如果执行了return没有表达式的语句,并且调用者使用了函数调用的值,则行为是未定义的. 到达}那个终止函数等同于执行return没有表达式的 语句.

好的,所以现在的5.1.2.2.3子条款适用:

如果main函数执行不指定值的返回.返回到主机环境的终止状态是未定义的.

术语"终止状态未定义"似乎不是UB,也不是任何特定行为,但更像是在C标准范围之外,更像是:"让主机环境变得烦恼,我们洗手这里".这是正确的解释吗?

c c89 language-lawyer

15
推荐指数
1
解决办法
261
查看次数

main()函数可以返回double吗?

main()C程序中的函数可以返回double数据类型吗?

如果,如何以及为何?

如果不是,为什么?

c return-type

14
推荐指数
1
解决办法
6132
查看次数

为什么在将main声明为`int main(void)`时传递命令行参数时没有错误?

情况1:

void hello(void) {
    //something
}

int main()
{
    hello(1); //error
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

案例2:

int main(void) {
    //something
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行:

./a.out something something //No error, Why?
Run Code Online (Sandbox Code Playgroud)

为什么没有错误?main将无法采取任何论点.那么为什么可以从命令行提供参数呢?

c program-entry-point command-line-arguments

14
推荐指数
3
解决办法
882
查看次数

C中main()的不同约定

我唯一接触过编程的是Java,在那里我没有遇到(到现在为止)编写main方法的不同惯例.我一直在学习c(K&R和C编程现代方法)的来源,他们使用的非常不同形式的主要方法(功能).

K&R版本到现在为止:

main() {
    blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)

C编程现代方法

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

要么

int main() {
    blah blah blah; 
    //returns nothing
}
Run Code Online (Sandbox Code Playgroud)

为了让事情更加混乱,我见过人们这样做:

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

虽然他们要么返回0,要么没有.我没有在我没有受过教育的假设中认为这只是一个标准问题,但可能更具概念性或更深层次.有人能解释一下这个问题吗?

c program-entry-point

14
推荐指数
3
解决办法
474
查看次数

int main()和void main()如何工作

我是C语言的初学者.任何人都可以使用示例详细解释main(),int main(),void main(),main(void),void main(void),int main(void)如何在C语言中工作?正如在我们使用void main()时所发生的事情以及当我在简单语言中使用int main()时发生的事情等等.
我知道,但无法理解它在做什么:

  1. main() - 函数没有参数
  2. int main() - 函数返回int值
  3. void main() - 函数返回任何内容等.

当我使用int main()返回0编写简单的hello world时,它仍然给出与使用void main()时相同的输出,那么它是如何工作的?它的应用是什么?

c void

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