关于c语言的int main()的问题

问题描述

关于c语言的int main()的问题

在int main()中有int,程序最后就要加return 0;书上说函数类型可以省略,此时函数的默认数据类型为int型,但为何在只写main()这样的程序时,后面就可以不加return 0?同时还想问一下return和exit直接有什么区别呢?

解决方案

问题一回答:楼主可以搜索下,在任何C语言中从来没有哪一种标准是鼓励没有返回值的函数的,也就是void main(),甚至一些国外程序大神是严厉抨击这种void返回类型。 所以在gcc 编译下,无论哪一种标准都是c99,ansi,要么产生
错误,要么产生警告。

//filename a.c
void main(){
}

gcc a.c 的输出信息为a.c:7:1:

warning: return type of 'main' is not 'int' [-Wmain-return-type]
void main(int argc, const char *argv[])

gcc -ansi a.c`

a.c:7:1: error: 'main' must return 'int'
void main(int argc, const char *argv[])

楼主可以看到在ansi标准中对于void返回值直接返回了错误,连编译都通不过。

至于楼主的疑问应该是来源于微软的vc++,该ide中集成的编译器,已经不是原声的符合标准的c编译器,微软自己做了很多改动,这个你可以网上搜索下。

问题二:至于exit 则是用来标识应用程序执行状态的,如果直接return 只能说程序执行成功或者不成功,程序中的分支判断则无线显示,exit退出吗只是用来标识
应用程序到底是以何种状态的,因为应用程序都是要被操作系统加载的,操作系统通过返回码来了解进程的执行细节,这也就是前面的为什么不鼓励用void作为返回.

解决方案二:

 要看什么编译器,一些编译器不检查代码中是否返回,一些编译器检查。
对于前者,虽然可以编译,但是返回结果是未知的。这其实很糟糕。如果一个函数返回的是一个指针,而你的函数有很多分支,偏偏某个分支忘记写返回值了,就可能丢出野指针。而且这种错误特别难查。

看下面代码:
int * foo(int x)
{
    for (int i = 0; i < x; i++)
        {
            if (i == x - 1) return xxx;
        }
}

这代码看上去会返回一个值,但是如果x <0,循环不执行,那么根本不会调用return,如果编译器没有检查,返回什么就不知道了。
所以允许编译并不是好事。

解决方案三:

第一个问题:因为C的编译器规则比较宽松,并不检查任何函数(包括main函数)是否返回了值。
第二个问题:return是用来对一个函数进行返回,它是基本语句。而exit(0)本身是一个带有一个参数的函数,用来表示这个程序已经结束。

解决方案四:

从我学C语言的角度来看:
首先,写int 面()时,因为已经写了int,所以必须有一个int类型的返回值,即return 0,当然你也可以返回别的int类型的值,其次,省略的时候,可能是因为c
语言在构造运行这个程序的时候有一些规则,也就是顺序,或者说这可能是编写人员在开始时设定的规则,也就是默认是这样的,你只要知道就好。
return是返回一个值给这个函数,结束这个函数,而exit是直接结束这个程序。
学习c语言,最重要的需要知道构造函数,析构函数,继承等等一些的调用顺序,等等,多了解内部运行机制是最重要的。加油吧

解决方案五:

如果函数前没有声明返回类型,在 C 语言里默认是返回 int 的。想不写返回可以使用 void main()。
return 和 exit 对于返回类型是一样的。

时间: 2024-09-20 02:13:12

关于c语言的int main()的问题的相关文章

c语言-菜鸟求教:int Main(WORD *parameter1)的数据类型问题。

问题描述 菜鸟求教:int Main(WORD *parameter1)的数据类型问题. 问一下main函数的输入量是指向word类型变量的地址?main函数返回的值为int型? 解决方案 这个一般是用于传递参数,为什么用word不清楚,按理说应该是char[]或者char *才行,传别的,操作系统不支持,如果main是作为入口的话. 解决方案二: 入参是一个 WORD * 指针变量,你要说是指向 WORD 变量的地址也没错,返回值是 int 没错.

c语言 in function ‘main;

问题描述 c语言 in function 'main: int min_of(const int vc[],int no) { int i; int min=vc[0]; for(i=1;i<no;i++) if(vc[i]<min) min=vc[i]; return 0; } 输完后显示C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32liblibmingw32.a(lib64_libmingw32_a-crt0_c.o) In fu

C语言之没有main函数的helloworld示例_C 语言

几乎所有程序员的第一堂课都是学习helloworld程序,下面我们先来重温一下经典的C语言helloworl 复制代码 代码如下: /* hello.c */  #include <stdio.h>    int main()  {      printf("hello world!\n");      return 0;  }  这是一个简单得不能再单的程序,但它包含有一个程序最重要的部分,那就是我们在几乎所有代码中都能看到的main函数,我们编译成可执行文件并查看符号表

HEVC代码追踪(一):int main

int main(int argc, char* argv[]) { TAppEncTop cTAppEncTop; // print information fprintf( stdout, "\n" ); fprintf( stdout, "HM software: Encoder Version [%s]", NV_VERSION ); fprintf( stdout, NVM_ONOS ); fprintf( stdout, NVM_COMPILEDBY )

HEVC代码追踪(十二):解码之int main

int main(int argc, char* argv[]) { TAppDecTop cTAppDecTop; // print information fprintf( stdout, "\n" ); fprintf( stdout, "HM software: Decoder Version [%s]", NV_VERSION ); fprintf( stdout, NVM_ONOS ); fprintf( stdout, NVM_COMPILEDBY )

c语言 计算机二级 main函数中参数是怎么回事

问题描述 c语言 计算机二级 main函数中参数是怎么回事 这个题中的这个main函数中的 argv 是什么意思 怎样确定它的值 解决方案 argv是程序启动参数,argc是参数个数(空格分隔) 解决方案二: c语言main函数的参数[C语言]语法--main函数的参数c语言中 main()函数的参数说明 解决方案三: 他的值的确定是启动程序时候外面传来的,具体参数意思是caozhy说的那样 解决方案四: 以一名计算机专业的学生来说,像是这种argv或者是argc只需要知道它是以什么形式出现的就

int main(int argc,char* argv[])详解

argc是命令行总的参数个数      argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     命令行后面跟的用户输入的参数,比如:     int   main(int   argc,   char*   argv[])     {     int   i;     for   (i   =   0;   i<argc;   i++)     cout<<argv[i]<<endl;     cin>>i;     return   0; 

c语言-大端小端的存储问题,牵涉到数组和指针,C语言

问题描述 大端小端的存储问题,牵涉到数组和指针,C语言 #include int main() { int a[i]; printf("%x ",a); int *p=a; *p=0x12345678; return 0; } 若下面程序运行结果为bfae4d68,a[0]以大端模式如何存储,以小端模式如何存储,请用内存结构示意图表示. 有点不太了解它的内存方式 解决方案 C语言数组,指针,函数等问题 解决方案二: 我不知道他们的内存到底是如何分配的 解决方案三: 比如是一个字节,内存

php9个超全局变量的用法详解(一)

PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV 1.先看一下$GLOBALS,它是包含了全部变量的全局组合数组,什么意思呢,看一个c语言程序 int main() { int a = 3; void t(