gpt4 book ai didi

c - 理解这个 opengl 代码

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:06 24 4
gpt4 key购买 nike

我是一名 Java 程序员,第一次用 C 语言学习 opengl。我想剖析我的导师给我的这个简单代码,没有太多解释:

void renderScene (void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glFlush();


void init(); {
int submenu;
submenu = glutCreateMenu(menuApp);
glutAddMenuEntry("Option A",1);
glutAddMenuEntry("Option B",2);
glutAddMenuEntry("Option C",3);

glutCreateMenu(menuApp);
glutAddSubMenu("SubMenu",submenu);
glutAddMenuEntry("Salir",4);

glutAttachMenu(GLUT_RIGHT_BUTTON);


}

}

问题:

a) void renderScene (void) 是什么意思?为什么这个函数应该采用 void 参数?

b) void init(); 到底是什么东西? {}?为什么两者都;和 {}?为什么它 renderScene 函数中?

最佳答案

void renderScene (void) 是 C 的表达方式,“将 renderScene 声明为不接受任何参数且不返回任何值的函数”void renderScene() 会有所不同 - 它是 C 中过时的函数声明样式,声明 renderScene 采用固定但未指定数量的参数。

另一部分有点奇怪,并且以误导的方式格式化。如果格式正确,它将显示为:

void init();

{
int submenu;
submenu = glutCreateMenu(menuApp);
glutAddMenuEntry("Option A",1);
/* ... */
}

{ } 中的 block 与 void init(); 无关。 void init(); 声明了一个名为init 的函数(这是上面提到的过时的函数声明样式)。函数声明只是对编译器说“某处有一个函数叫做 this,这就是它的参数和返回值”的一种方式。由于永远不会调用 init 函数,因此可以省略这一行。

{ } 中的 block 只是一个复合语句。它所做的只是打开一个新范围 - 变量 submenu 的范围仅限于该 block 。


还值得指出的是,声明 void init(); 本身就是一个时代错误 - 它是在同一 block 中的代码之后出现的声明,这是 1999 年修订版中添加的功能C 标准,但它是一个没有原型(prototype)的声明,如前所述,它早于最初的 1989 C 标准。

另请注意,不在文件范围内的函数声明本身有些不寻常,尽管完全合法。

关于c - 理解这个 opengl 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com