OpenGL包含OS X的指令

esi*_*gel 3 c opengl macos

我有点困惑为什么这个代码编译.我省略了"必要的" #include <OpenGL/gl.h>,程序仍然可以编译.当我的程序从GL库中调用函数而不包括它们时,这怎么可能.

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

    glClearColor(1.0,1.0,1.0,1.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用这个编译命令:

 gcc -framework GLUT -framework OpenGL test.c
Run Code Online (Sandbox Code Playgroud)

我假设添加-framework只是指定了库所在的链接器,但我还以为我还需要头文件?

Jas*_*oco 5

glClearColor不是宏,因此您不需要标头来定义它.如果添加警告:

gcc -o test -Wall -W test.c -framework GLUT -framework OpenGL
Run Code Online (Sandbox Code Playgroud)

然后你会得到关于glClearColor的隐式声明的警告.您也将无法使用任何宏,因为编译器会给您一个未定义的错误.由于glClearColor符号由链接器正确解析,因此您永远不会收到错误.

我也想到你可能一直在想这个,因为你以为你在编译C++.您提供的示例实际上编译了C代码,其中未能声明函数原型并不是错误.如果您打算将其编译为C++代码,则需要以下命令行:

g ++ -o test test.cpp -framework OpenGL

在这种情况下,你肯定会因为不包括gl.h而出错,你的代码将无法编译.从命令行执行GCC时,g ++是C++编译器,而gcc是通用C编译器.