__declspec(dllexport),extern,extern "C"

接口:(一般项目中与宏定义一起使用)

__declspec(dllexport):用在函数声明前,此前缀是用来实现生成dll文件时可以被导出至dll,即提供调用接口。

__declspec(dllimport):在调用dll中的接口时,用此前缀声明函数,进而可以调用之前export到dll中的接口

extern:

  1. 同文件中,如果在一个文件中main函数在前,但是其中调用main函数后面才声明定义的变量或函数,那么可以在main其中加extern前缀,实现正常调用。否则编译器从main文件上方编译时找不到使用对象,会报错。
  2. 不同文件中,同上,也是要先声明,如extern int a;或者extern void func(arg);
  3. 注意:extern只对全局变量才起作用,因此局部变量是不行的。函数是可以的,因为所有的函数都是全局的。
  4. 使用extern比include头文件的好处就是,更加直接,直接取某一个对象。

extern "C":

  • 因为c++与c的编译方式不一样,比如函数在c++的编译过程中会加上一些前缀然后再链接。而c不是这样。因此如果在编译时把c的代码用c++的方式编译,会产生编译连接错误。因此当在c++中引入c的库时要加extern "C",使项目能智能地选择编译方式。

.hpp文件:(预编译头文件)

  • 其实就是将.cpp文件和.h文件放在一个文件中(将定义和声明放在一起被包含)

声明和定义的区别:

  • 定义:给出对象位置(名称),大小(类型)。最本质的是开辟内存空间。
  • 声明:不会开辟内存空间
  • int i,既是定义也是声明。extern i,声明。
  • 一个项目中定义只能做一次,而声明可以多次。函数声明也叫函数原型 type func();
  • 为何要先声明后使用?因位这样在编译时可以让编译器核对你后面是否使用正确,如参数个数,返回类型等。

typedef和define的区别:前者是编译处理,后者是预处理。

posted @ 2019-12-16 02:07  Parallax  阅读(514)  评论(0编辑  收藏  举报