
正文
包含windows系统主函数的词条
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
什么是windows窗口函数
理解Window系统、主窗口、窗口函数这三者之间的关系,对于编写Windows程序十分重要。
主函数和窗口函数都是由Windows系统来调用的函数,只不过主函数是程序启动之后,系统首先调用的函数;
而窗口函数是主函数在获得消息并把消息发给系统之后,由操作系统调用的函数。
不同的消息所对应的操作就是由窗口函数完成的,Windows程序员的工作就是编写窗口函数的case中的代码。
Windows系统、主函数、窗口函数这三者之间的关系,如下图所示:
相关问答
Q1: 1.(10分)C程序中主函数的名字可以取名为main,也可以取名?
在 C 语言中,主函数的名字通常是 main。这是 C 语言的一个约定,所有的 C 程序都必须有一个名为 main 的主函数。这是 C 程序的入口点,在执行程序时系统会自动调用 main 函数。
然而,在一些特殊情况下,你也可以使用其他名字来定义主函数。例如,在某些编译器中,你可以使用 WinMain 作为主函数名,这样程序就可以在 Windows 系统上运行。但是,这种做法并不是 C 语言的标准用法,而且不同的编译器对于主函数名的支持也可能会有所差异,因此不建议在通用 C 程序中使用其他名字来定义主函数。
Q2: Windows下应用程序的主函数是什么?
windows系统主函数你说windows系统主函数的是Windows应用程序?主函数是WinMainwindows系统主函数,控制台的是Mainwindows系统主函数,
Q3: 函数声明与函数定义分别在程序中的什么位置?为什么?
函数,是编程语言中可以独立运行的一个代码块。
在C语言中,程序从main()函数开始运行,其他函数要被main函数调用才可以运行。
在从shell解释器运行编译好的可执行程序时,main函数会被shell启动,开始运行。
C语言的函数在使用时要经过3个步骤:声明、定义、调用。
函数声明,就是给出函数的原型,让程序员知道怎么给函数传参数,怎么接收返回值,让编译器知道怎么进行代码的类型检查。main函数的声明是这样的:
int main();
它的返回值是int类型,不需要传参数。
printf()函数的声明是这样的:int printf(const char* fmt, ...);
它的返回值是int类型,第一个参数是格式字符串,之后可以跟可变参数。
函数声明的语法是:
返回值类型 函数名(形参类型0 形参变量0, 形参类型1 形参变量1);
如果有多个形参,就以逗号隔开。每个形参都有类型和变量名,其中形参变量名在声明时可以省略。最后以分号结尾,结束声明语句。
如果不想让人看到函数的源码,就可以只提供一个声明和一个编译后的文件,这样别人就只能看汇编码了(笑)。C语言的这个设计,对保护知识产权还是有利的。
函数定义,就是在声明之后不跟分号,而是以大括号表示函数体,把函数的具体代码写在大括号内部。
上图中的main()函数就是定义,printf()函数是声明。
定义,实现的是函数的内容。函数是不能多次定义的,否则编译器不知道采用哪个定义的代码。
但函数可以多次声明,只要声明都是一样的,不互相矛盾。
只要打了两个大括号{},就算定义了函数。空实现也是实现,可以先占住这个位置,以后再填写具体的函数代码。即,先给出整个程序的框架来,然后再填写细节。
在实现了函数之后,必须去调用它,它才会运行。
除了main函数是被shell启动的,其他函数都要直接或间接被main函数调用。
某一个函数在运行时,实际是存在一条从main函数到它的调用链的。
函数调用的语法是:
函数名(实参变量0, 实参变量1);
如果有多个实参,则以逗号隔开。如果要接收函数调用的返回值,可以用一个变量去接收:
返回值变量 = 函数名(实参变量0, 实参变量1);
返回值变量的类型,要与函数的返回值类型一致,(返回值变量)在使用之前要先声明。
对于有返回值的函数,也可以不接收它的返回值。例如,printf()虽然有个int类型的返回值,用于表示打印了多少个字符,但一般不接收它。
所以C语言的入门代码都是printf("hello world\n");
而不是int ret = printf("hello world\n");
函数名,在C语言中属于标志符(identity)。
标志符的命名规则是,以下划线或大小写字母开始,之后可以跟数字、字母、下划线,(但不能跟运算符或其他特殊符号)。
它们在代码中用于表示变量名、结构体类型名、函数名,或者给goto使用的标号。
基本类型的类型名,都被定义为了关键字,不能再用作标志符。
struct S {
int a;
int b;
} s;
S是标志符,表示结构体类型S。
a是标志符,表示结构体的成员变量a。
s是标志符,表示变量s,它的类型是结构体类型S。
函数名,也属于标志符,所以函数名也要以下划线或大小写字母开始,不能是关键字、运算符、或其他特殊符号。
0123,这不能做函数名,C语言的以0开始的数字是八进制数字。
0x123,也不能做函数名,以0x开始的数字是16进制的数字。
main,可以做函数名,这是主函数,在整个程序里只能有一个,不能作为普通函数的名字。
__schedule,以下划线开始,可以做函数名。
不过,以两个下划线开始的函数,大多是Linux系统或C库的函数。普通函数最好别这么命名。
char,这不能做函数名,它是字符类型的关键字。
+,这也不能,它是表示加法的运算符。
CreateWindowEx,这可以做函数名,一看就是典型的匈牙利风格,微软的代码(笑)。这个函数是windows系统上创建窗口的API。
匈牙利风格的代码,是从微软开始流行的一种风格,函数名以一个或多个英文单词命名,每个单词的首字母大写,其他字母小写。
不过Linux的代码(包括第三方的软件),还是保持上古C代码的那种下划线风格,全部字母小写,单词之间以下划线分割,而且多使用缩写。
有时候,缩写之后只剩下几个字母,就直接新组一个词当函数名了。
例如,Linux上启动新程序的函数execve(),就是个缩写的单词。
执行的英文单词叫execute,windows上的可执行程序叫exe文件,就是这个词的前3个字母,Linux也选了这三个字母。
cve这三个字母,来自完整的main函数的参数列表:
int main(int argc, char* argv[], char* envp);
main函数的完整声明是上面这个样子的,int main()这个是简化版的。
其中第一个参数argc,表示要传给main函数的参数个数。通过命令行参数的形式传递。arg是参数argument的缩写,c就是count,即参数个数。
argv,是(传给main函数的)参数字符串的数组,v指的是vector。
envp,是环境变量的路径,environment path。
所以,启动main的系统调用就叫作execve()了,而不叫StartProgram()。
虽然后者明显容易理解,但它字母多啊,系统调用的API哪能让人一眼就看出来是启动进程的呢(汗)。
回到开头,main()函数在Linux上就是被execve()这个API启动的,然后其他函数要被main函数直接或间接调用。
不被main函数(直接或间接)调用的函数,并不会运行。
上图的代码只会打印add,因为main只调用了add()函数,没有调用sub()函数。
这段简单的代码,只有这三个函数,sub()没有被调用。
Q4: main函数的参数
C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数windows系统主函数,是所有程
序运行的入口。其余函数分为有参或无参两种windows系统主函数,均由main()函数或其它一般函数调用,若调用
的是有参函数,则参数在调用时传递。 int main(void)//整数类型主函数(无类型){...y1=f1(x1,x2);//赋值过程...}f1(int a,int b)//f1(整数类型a,整数类型b){//百度百科示例代码.....Y2=f2(x3,x4);//赋值过程//百度百科示例代码}f2(int m,int n)//f2(整数类型m,整数类型n){//百度百科示例代码}在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,允许main()调用
其它函数并传递参数。事实上,main()函数既可以是无参函数,也可以是有参的函数。对于有
参的形式来说,就需要向其传递参数。
我们先看一下main()函数的带参的形式: int main(int argc,char **argv)//整数类型主函数(整数类型统计参数个数,字符类型*数组指针至字符[]){//百度百科示例代码......}从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件(对windows操作系统而言),这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由
系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:
命令参数1参数2....参数nt;
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。
数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后
才是参数。
下面用实例来说明带参数的main()函数的正确使用。
[例6-29] 利用图形库函数绘制一个变化的环。它是把一个半径为R 1的圆周分成n份,然
后以每个等分点为圆心,以R s为半径画n个圆(关于作图的详细理论本教材第9章第1节作了专
门介绍,这里只作简单分析)。利用m a i n ( )函数的带参数形式,我们可以从键盘以命令行的方
式输入R 1和R s及屏幕的背景色。 #includegraphics.h//包含图形库函数的头文件#includemath.h#definepi3.1415926intmain(int argc,char **argv){intx,y,r1,rs,color;double a;intgdriver=DETECT,gmode;initgraph(gdriver,gmode,"..\\bgi")//启动图形工作方式r1=atoi(argv[1]);//计算基础圆半径rs=atoi(argv[2]);//计算同心圆半径color=atoi(argv[3]);//背景色cleardevice();//清除图形屏幕setbkcolor(color);//设置背景色setcolor⑷;//设置图形显示颜色for(a=0;a=2*pi;a+=pi/18)//绘制同心圆{x=r1*cos(a)+320;y=r1*sin(a)+240;circle(x,y,rs);//以圆心坐标为x、y,半径为rs画圆}getch();//等待按键继续closegraph();//关闭图形工作方式return0;}若程序名为L6-29.c,经编译、连结生成可执行文件L6-29.exe。在操作系统的环境下运行程序,命令行方式为:
具体步骤:
1、Win + R打开运行;
2、输入cmd打开命令行;
3、进入到要执行的exe文件所在目录,如要要执行E:\程序设计\Ctest.exe文件,则输入E:回车(注意:如果要更改其他盘目录必须首先进入要进入盘的根目录,例如进入E盘则输入E:不用输入cd E:)进入E盘根目录,再输入cd E:\程序设计 则进入了当前目录,最后就可以输入参数了,例如Ctest yishi weban回车即可(Ctest为要执行的可执行文件,后面两个也为要传递给main函数的参数);
l6-29 40 20 3
则命令行与main()函数的参数有如图6-16所示的关系
图6-16中,argv[0]是程序名,argv[1]是r1的值,
argv[2]是rs的值,argv[3]是屏幕的背景色。
由于指针数组均存放字符串,所需的圆半径及背景
色彩通过atoi()函数转换为整型。
通过带参数的main()函数,我们可以为自己的程序设置口令,在运行程序的命令行中给出所需的口令,正确则继续,否则退出。程序图形输出如图6-17所示。
[例6-30]将上述程序作修改,在程序的入口处添置密码,若给定密码正确,则显示图
形。 #includegraphics.h#includemath.h#definepi3.1415926int main(int argc, char **argv){intx,y,r1,rs,color;doublea;intgdriver=DETECT,gmode;if(strcmp(argv[1],"pass")!=0)//设置口令的比较{printf("passworderror!\n");exit(0);}initgraph(gdriver,gmode,"..\\bgi");r1=atoi(argv[2]);rs=atoi(argv[3]);color=atoi(argv[4]);cleardevice();setbkcolor(color);setcolor⑷;for(a=0;a=2*pi;a+=pi/18){x=r1*cos(a)+320;y=r1*sin(a)+240;circle(x,y,rs);}getch();closegraph();return0;}在操作系统的环境下运行程序, 命令行中增加口令“pass”,命令行方式为:
l6-30 pass 20 40 3
指针数组的存储字符串如图6-18所示。
若给定字符串argv[1]的值是pass,则程序正确运行,否则程序退出。口令正确的情况下,显示的图形为图6-17中的一个。
windows系统主函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、windows系统主函数的信息别忘了在本站进行查找喔。






