zoukankan      html  css  js  c++  java
  • c++关键字extern的用法

    一、用于链接指示符

    比如迩想在c++代码中插入c代码或者FORTRAN或者Ada代码、可以使用extern、比如想使用c形式的exit函数、在前面加上extern "C"就可以了、

    extern "C" void exit(int);

    但是请注意一点、C++编译器只保证完整的支持C语法、其它的FORTRAN语法Ada语法可不保证一定会支持、或者说不完整支持、具体支持迩要查看迩使用的编译器的支持列表说明书、如果编译器够强大、也许也会支持java吧、囧

    当然、如果可以在C++代码中写入C函数、也说明可以在C++代码中使用C函数指针、事实上和C++差不多、也就是前面多了个extern "C"

    extern "C" void (*pf)(int);
    void (*pf2)(int);

    注意C++函数指针不能与C函数指针混用、也就是pf2不能赋值给pf1、因为pf2不是C函数指针、同样的、非C函数也不赋值给C函数指针、虽然C++标准并不支持这种函数指针的赋值、但是某些编译器是可以支持这种特性的、但无论如何、如果是为了可移植性、最好放弃这种非标准C++的做法

    如果是多行C代码、用花括号就可以了

    extern "C" {
    int printf( const char* ... );
    int scanf( const char* ... );
    }

    但不可以在函数内使用链接指示符

    void main(){
         extern "C" void exit(int);
    }

    这样是错误的、必须把extern语句放在函数外、所以其实最佳声名extern语句的地方就是在头文件

    二、extern的另一种用法是声明变量

    这种用法主要集中在头文件中、因为如果在一个项目中多个文件都使用同一个变量名game_cout、迩希望保证这个变量类型始终是int类型、就必须在头文件中声明game_cout为

    extern int game_cout;

    为什么要这么做呢、那莪先回答迩为什么不这么做不行的原因吧、那就把这个语句在头文件删除了、所以迩可以在同一个项目中在a.cpp把这个文件定义成char类型的game_cout、而在b.cpp文件中定义game_cout类型为float、那么某个后续来开发这个游戏的程序员就遭殃了、他想统计一下game_cout的数量然后在用户界面打印输出、瞪的一声就出错、类型不相等、当然迩可以事行在文档说明说告诉大伙、喂!game_cout只能用int来声明、不要用其它类型、但谁能保证迩的同事一定会听到这件事呢、如果别人没来参加这个会议呢、所以最好的办法就是让其它同事不这么做不行、迩不定义成int程序就马上编译出错、这是用技术框架来定死这种类型、因此迩只需要在游戏的公用头文件里定义extern int game_cout就可以简单的达成这一目的了、现在人人都得尊首迩的规则了、是不是狠简单呢、那么为什么不直接在头文件声明int game_cout呢、没办法这么做、这样会造成重复定义了、因此、在这种情况下、迩就必须这么做

  • 相关阅读:
    Vue-dialog(弹框组件)
    Vue封装select下拉组件
    RAID总结
    消息队列
    存储
    算法开始
    硬件杂记
    要看的
    关于kernel的疑问,不解
    杂技
  • 原文地址:https://www.cnblogs.com/klobohyz/p/2536263.html
Copyright © 2011-2022 走看看