>  기사  >  백엔드 개발  >  C 프로그램의 실행은 어디에서 시작되고 끝나나요?

C 프로그램의 실행은 어디에서 시작되고 끝나나요?

青灯夜游
青灯夜游원래의
2020-08-31 16:45:0923704검색

C 프로그램의 실행은 어디에서 시작되고 끝나나요?

C程序的入口是main函数,一般来说只要是正常运行结束的都是从main函数的第一句话开始,最后一句结束。

例如:

int main()//程序开始
{
printf("Hello!\n");
return 0;//程序结束,返回值
}

但如果程序执行到中间遇到 return(main函数里的) exit(不管是main函数还是子函数中) 等也是会结束程序的。

C语言main函数的写法

main函数是C程序的入口函数,即程序的执行是从main函数开始,对其他函数的调动也是直接或间接地在main函数中被调用。那么main函数又是被谁调用呢?答案是操作系统。C语言发展至今,对main函数有多种不同的写法,下面就来探究一下各种不同的写法。注:测试环境为Ubuntu 17.10,GCC版本为7.2.0。

NO.1

main(){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
main(){
	printf("Hello World\n");
}



NO.2

void main(){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
void main(){
	printf("Hello World\n");
}


NO.3

int main(){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
int main(){
	printf("Hello World\n");
	return 0;
}


NO.4

int main(void){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
int main(void){
	printf("Hello World\n");
	return 0;
}



NO.5

int main(int argc,char *argv[]){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
int main(int argc,char *argv[]){
	printf("Hello World\n");
	return 0;
}

NO.6

int main(int argc,char **argv){}

例:

#include ade979de5fc0e1ca0540f360a64c230b
int main(int argc,char **argv){
	printf("Hello World\n");
	return 0;
}

从上面的测试来看,写法1在C90标准下可以正常编译,而在C99和C11标准下会抛出一个警告(不写返回值,默认的返回值为int,也就相当于写法1和写法3等价)。写法2-6在C90、C99、C11标准下均能正常编译。在这么多写法中,到底哪一些才是main函数的标准写法?于是查阅了C标准文档对main函数的规范写法,见下图:


        从标准文档中可以看出,写法4、5、6才是main函数的规范写法。写法5与写法6是等价的。那为什么又会有写法1、2、3呢?那是因为从1972年C语言被设计出来到C90标准发布这段时间,对C语言不同的实现就导致了对main函数的差异性。强烈不推荐写法2,因为main函数是被操作系统调用的,操作系统会根据main函数的返回值来判断程序的正确执行与否,如果返回void,那代表的是什么状态呢?而且一些编译器支持这种写法,一些编译器不支持,所有的标准并未认可这种写法。对于写法1和写法3还勉强能够接受,不过也不建议这样写,最好还是按照标准写法来写。为什么要按照标准写法来写?那是因为为了让C程序具有更好的移植性。写法5与写法6是等价的,第一个参数代表main函数参数的个数,第二个参数用指针分别指向这些参数。argv[0]代表程序名,argv[1]到argv[argc-1]代表程序参数。下面再看看main函数的返回值问题,见下图


그림을 보면 메인 함수의 반환값이 int형의 호환형일 경우, main 함수에서 return한 값이 exit와 함께 실행되는 것과 같다는 것을 알 수 있습니다. xxx는 주 함수에서 반환된 값을 나타냅니다. return 문 작성을 잊어버린 경우 기본 함수 본문의 닫는 중괄호 }가 실행되면 기본값 0이 반환됩니다. 0을 반환하면 프로그램 실행이 성공하고 프로그램이 종료된다는 의미입니다. main 함수의 반환 유형이 호환 가능한 int 유형이 아닌 경우 프로그램이 운영 체제에 반환한 상태가 명확하지 않습니다.

C 표준문서 다운로드 주소 :

포털 : http://download.csdn.net/download/u012219371/10184521

C 표준문서 소개 :

포털 : http://blog.csdn.net/u012219371/ 기사/세부정보/78951972

관련 추천: c 언어 튜토리얼 영상

위 내용은 C 프로그램의 실행은 어디에서 시작되고 끝나나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.