• __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的区别:前者是编译处理,后者是预处理。

  • 相关阅读:
    读书笔记:7个示例科普CPU Cache
    no such partition grub rescue>
    这些个云盘
    原版win7镜像IE主页被篡改?
    JS判断访问设备、客户端操作系统类型
    floodlight make the VMs can not getDHCP IP address
    MPI之聚合通信-Scatter,Gather,Allgather
    MPI 环境搭建问题-运行程序闪退
    【算法、递归回溯解决数独】
    算法【最大子序列问题】
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725204.html
Copyright © 2020-2023  润新知