为什么可以写个头文件 然后main.cpp 里面使用那个头文件的函数?在一个texture.h 里面:C/C++ codeunsigned
为什么可以写个头文件 然后main.cpp 里面使用那个头文件的函数?
在一个texture.h 里面:
C/C++ codeunsigned int loadTexture(const char* filename);
然后texture.cpp文件里面又没有包含texture.h
texture.cpp:
C/C++ codeunsigned int loadTexture(const char* filename ){ unsigned int textureID; int pixelLayout; //里面内容省略 return textureID;}
然后main.cpp:
#include "texture.h"
然后就可以使用 loadTexture 这个函数了?
问题: 1, 为啥texture.cpp里面不用写include"texture.h" ?
2, 为啥main.cpp可以使用 loadTexture 这个函数?
谢谢
[解决办法]对于函数是可以这样,对于类不行
不然你套个namespace试试能否编译
我认为是域的作用,这里的函数相当于是全局函数,CPP文件参与编译,也就在内存中找得到这个函数,那么自然可以调用
[解决办法]在别的头文件里包含了吧
[解决办法]看一下下边这儿你就会明白了
http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm
[解决办法]mian函数里要调用函数,需要声明函数,头文件里就包括了你的函数声明,main里加了头文件就可以调用相应的函数了。
[解决办法]1, 为啥texture.cpp里面不用写include"texture.h" ?
答:标准方式是需要写的,但是某些编译器会自动查找相同名称的头文件自动包含。
2, 为啥main.cpp可以使用 loadTexture 这个函数?
答:首先你包含了loadTexture的声明,其次,编译器在链接时连接了texture.cpp生成的目标文件。
[解决办法]声明是声明,定义是定义, 声明在链接时候自己找定义, 这个包含是多余的, 不过继续看:
定义的时候包含声明是为了很多原因,简单举两个例子。
头:extern "C" void func();
源: #include ".h" void func(){}
上边包含头文件其实就防止了程序员定义时候忘掉extern "C"
再就是类成员函数的定义必须见到类的完整定义,所以包含头文件是最省事的,但不是最高效的。
只有深刻理解编译和链接, 自己决定怎么做可以在头文件改变的情况下(接口变)最少的重新编译源文件。