我有点困惑为什么这个代码编译.我省略了"必要的" #include
,程序仍然可以编译.当我的程序从GL库中调用函数而不包括它们时,这怎么可能.
int main(int argc, char** argv) { glClearColor(1.0,1.0,1.0,1.0); return 0; }
我使用这个编译命令:
gcc -framework GLUT -framework OpenGL test.c
我假设添加-framework只是指定了库所在的链接器,但我还以为我还需要头文件?
glClearColor不是宏,因此您不需要标头来定义它.如果添加警告:
gcc -o test -Wall -W test.c -framework GLUT -framework OpenGL
然后你会得到关于glClearColor的隐式声明的警告.您也将无法使用任何宏,因为编译器会给您一个未定义的错误.由于glClearColor符号由链接器正确解析,因此您永远不会收到错误.
我也想到你可能一直在想这个,因为你以为你在编译C++.您提供的示例实际上编译了C代码,其中未能声明函数原型并不是错误.如果您打算将其编译为C++代码,则需要以下命令行:
g ++ -o test test.cpp -framework OpenGL
在这种情况下,你肯定会因为不包括gl.h而出错,你的代码将无法编译.从命令行执行GCC时,g ++是C++编译器,而gcc是通用C编译器.