zoukankan      html  css  js  c++  java
  • __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的区别:前者是编译处理,后者是预处理。

  • 相关阅读:
    【算法18】重排数组元素使得所有的奇数位于所有偶数之前
    php函数ob_start()、ob_end_clean()、ob_get_contents()
    php代码调试
    判断文件存在是用file_exists 还是 is_file
    ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
    mysql常用的技巧
    用户角色权限设计
    解决ubuntu耳机和音箱同时发音
    SSH免密码登录
    IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725204.html
Copyright © 2011-2022 走看看