zoukankan      html  css  js  c++  java
  • c++中的extern

    用例子给你示范 
    // 1.cpp
    int x = 10;
    // 2.cpp 注意没有包含1.cpp
    #include <iostream>
    using namespace std;
    extern int x;
    int main ()
    { cout << x << endl; }
    //则输出10
    两个文件同在一个项目(project)中,你不包含某个文件(cpp)而可以用它内部定义的变量,(里是.pp不是.h, 因为在.h中定义的数据不能在.cpp中用除非这个.cpp包含这个.h文件)
    例:
    // 1.h
    #include <iostream>
    void print()
    {
    std::cout << "hello!" << std::endl;
    }
    // 2.cpp
    #include <iostream>
    using namespace std;
    // 以上两句在这个例子中可以不要
    extern void print();
    int main ()
    {
    print();
    }
    就会出错因为1.h中的void print();在不包含它的文件中是不可调用的,即使在声明了extern 也于事无补,如果你将这个例子中的1.h名字换成1.cpp就对了!
    从这些可以看出来,extern在这里起的作用是告诉编译器,你这个print()已经在某个.cpp中已经定义了,这里只不过是声明一下有这个东西,然后拿来用一下。定义只能出现一次,声明却可出现多次,也就是说extern声明可在多个文件中用(包括.h)
    还有,你还可以屏蔽extern声明,如第二个例子中的第二个.cpp文件可以改成
    #include <iostream>
    using namespace std;
    // 这里以上两句不能省略,因为,这里extern void print();函数已经不起作用了,在这里调用的而是本文件中定义的void print()函数,其中用到了cout,endl;他们来源于std::<iostream>
    extern void print();
    void print()
    {
    cout << "world!" << endl;
    }

    int main ()
    {
    print();
    }
    // 输出结果为world!
    还有一个extern "C"就不用说了,用这个可以允许C++程序中调用C的函数!
  • 相关阅读:
    javaweb一
    javaweb三、JDBC访问数据库
    Java学习笔记十
    socket qt基础版本
    QT+VS+添加console 解决方案
    QT创建TCP Socket通信
    左值引用与右值引用
    STL 中 map和set的区别
    C++中STL哈希表介绍
    虚函数总结
  • 原文地址:https://www.cnblogs.com/bayonetxxx/p/1554319.html
Copyright © 2011-2022 走看看