C语言中的main()函数返回值是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的main()函数返回值是啥?相关的知识,希望对你有一定的参考价值。
参考技术Avoid main()表示无返回值,就是说在程序尾不需要加return 0;
void main(void)与上述是相同的,只是更严密而已。
在java/C/C++中,main为程序运行的主入口方法,每个程序只有一个,也就是所有程序建立在卖弄函数的基础之上。
拓展资料:
C语言程序的结构认识
用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。
例1:计算两个整数之和的c程序:
#include main() int a,b,sum; /*定义变量a,b,sum为整型变量*/ a=20; /*把整数20赋值给整型变量a*/ b=15; /*把整数15赋值给整型变量b*/ sum=a+b; /*把两个数之和赋值给整型变量sum*/ printf(“a=%d,b=%d,sum=%d\\n”,a,b,sum); /*把计算结果输出到显示屏上*/
重点说明:
1、任何一个c语言程序都必须包括以下格式:
main()
这是c语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。
2、main()----在c语言中称之为“主函数”,一个c程序有且仅有一个main函数,任何一个c程序总是从main函数开始执行,main函数后面的一对圆括号不能省略。
3、被大括号 括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。
4、在 里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。
5、printf(“a=%d,b=%d,sum=%d\\n”,a,b,sum); ----通过执行这条c语言系统提供给我们直接使用的屏幕输出函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果:
a=20,b=15,sum=35
6、#include
注意:(1)以#号开头 (2)不以分号结尾 这一行没有分号,所以不是语句,在c语言中称之为命令行,或者叫做“预编译处理命令”。
7、程序中以 /*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。
C程序的生成过程
C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。
源程序的扩展名为 .c ,目标程序的扩展名为 .obj , 可执行程序的扩展名为 .exe 。
标识符
在编写程序时,必须为函数、变量等命名,这个名字称为标识符。C语言中标识符的命名规则如下:
标识符只能由字母、数字、下划线组成;
标识符的第一个字母必须是字母和下划线;
标识符区分大小写字母,如If和if是两个完全不同的标识符。
合法标识符如下: A6, b_3 , _mn 非法的标识符如下: ab#12 , 8m , tr3:4 , yes no
标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。选择变量名和其他标识符时,应注意做到 “见名知义”。
参考资料:
百度百科-c语言
关于VC++的Winmain函数(WINAPI是啥?)
学过C++,定义main函数时用 int main()
但VC++的Winmain函数则为int WINAPI Winmain()
int 是返回值类型,那么WINAPI是什么?
还是不理解_stdcall是什么
该函数是执行开始的地方,也是为程序其余部分执行基本初始化工作的地方。
为了允许Windows传递数据,WinMain()函数有4个形参和一个int类型的返回值,其原型如下:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
在返回类型说明符int的后面,有一个函数说明符WINAPI。WINAPI是一个Windows定义的宏,将使系统以特定于Windows
API函数的某种特殊方式处理函数名和实参。这种方式与C++通常处理函数的方式不同。具体的细节是不重要的——这只不过是Windows所要求的方式而
已,因此只需要将WINAPI宏名称放在由Windows调用的函数名前面即可。
如果确实想要了解调用约定,就查看随Visual
C++提供的文档,文档中有对调用约定的描述。WINAPI定义为__stdcall,将此修饰符置于函数名之前表明使用的是标准Windows调用约
定。这要求参数以相反的顺序被推入栈,被调用函数结束时清除栈。本章稍后将看到的CALLBACK修饰符也定义为__stdcall,因此与WINAPI
是等价的。标准C++调用约定由__cdecl修饰符指定。
Windows传递给WinMain()函数的4个参数包含着重要的数据:
hInstance属于HINSTANCE类型,是指向某个实例的句柄——
这里的实例是正在运行的程序。句柄是标识某种对象(这里是应用程序的实例)的整数值。句柄的实际整数值是多少并不重要。在任何给定时刻都可能有好几个程序
在Windows下执行,这就使相同应用程序可能有若干副本同时在活动,而这种情形需要识别出来。因此,hInstance句柄标识某个特定的副本。如果
启动某个程序的多个副本,则每个副本都有自己独特的hInstance值。正如我们很快就将看到的那样,句柄还用来标识各种其他事物。
hPrevInstance是从16位版本的Windows操作系统继承下来的,我们可以放心地对它置之不理。在当前版本的Windows中,该参数始终为空。
lpCmdLine是指向某个字符串的指针,该字符串包含启动程序的命令行字符。该指针允许挑出可能在命令行中出现的任何参数值。LPSTR类型是
另一种Windows类型,用来指定32位(long)的字符串指针,或者当以64位模式编译时,则用来指定64位的字符串指针。WinMain()的另
一个版本接收LPWSTR,用于使用Unicode。
nCmdShow决定着被创建窗口的外观。窗口可以正常显示,也可以最小化显示;例如,程序的快捷方式可能指定该程序在启动时应该最小化显示。该参
数可以是一组固定值之一,这些值是由像SW_SHOWNORMAL和SW_SHOWMINNOACTIVE这样的一些符号常量定义的。此类定义窗口显示方
式的常量还有9个,它们都以SW_开始。通常不需要检查nCmdShow的值,而是直接将其传递给负责显示应用程序窗口的Windows API函数。
程序中的WinMain()函数需要做以下4件事情:
告诉Windows该程序需要的窗口种类
创建程序窗口
初始化程序窗口
检索属于该程序的Windows消息 参考技术A 其实那是程序进入点:
正如在C程序中的进入点是函数main一样,Windows程序的进入点是WinMain,总是像这样出现:
int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR szCmdLine,int iCmdShow)
它在WINBASE.H中声明如下:
int WINAPI
WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
);
WinMain函数声明为返回一个int值。WINAPI标识符在WINDEF.H定义,语句如下:
#define WINAPI __stdcall
该语句指定了一个呼叫约定,包括如何生产机械码以在堆栈中放置函数呼叫的参数。许多Windows函数呼叫声明为WINAPI。
WinMain的第一个参数被称作「执行实体句柄」。在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字。在这种情况下,该句柄唯一地标识该程序,还需要它在其它Windows函数呼叫中作为参数。在Windows的早期版本中,当同时运行同一程序多次时,您便创建了该程序的「多个执行实体(multiple instances)」。同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源)。程序通过检查hPrevInstance参数就能够确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域。
在32位Windows版本中,该概念已被抛弃。传给WinMain的第二个参数总是NULL(定义为0)。
WinMain的第三个参数是用于执行程序的命令列。某些Windows应用程序利用它在程序启动时将文件加载内存。WinMain的第四个参数指出程序最初显示的方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中
参考资料:<<Windows程序程序>>
本回答被提问者和网友采纳 参考技术B 是一个宏#define WINAPI __stdcall
具体来说,他们是关于堆栈的一些说明,首先是函数参数压栈顺序,其次是压入堆栈的内容由谁来清除,调用者还是函数自己?
stdcall的调用约定意味着:
1)参数从右向左压入堆栈;
2)函数自身修改堆栈;
3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。 参考技术C _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 参考技术D WinMain是WIN32项目,控制台的C程序继续使用 void main(void).
以上是关于C语言中的main()函数返回值是啥?的主要内容,如果未能解决你的问题,请参考以下文章