zoukankan      html  css  js  c++  java
  • linkage

    #include <stdio.h>
                                                                                                        
    static int i3 = 3;                                                                                  
    int i3;                                                                                      
    
    int main() {
    }
    

    会有编译错误么?
    如果是

    #include <stdio.h>
                                                                                                        
    static int i3 = 3;                                                                                  
    extern int i3;                                                                                
    
    int main() {
    }
    

    会有编译错误么?
    答案是前者会, 后者不会. 如果你答对了, 本篇就不用看了.

    extern这个关键词到底是什么意思? 是不是表示, 这个symbol的定义不在这个源文件, 在另一个源文件? 好多博客都说, 如果你要用其它源文件的函数, 需要extern. 实际上对于函数不需要extern, 只有用外界的变量才需要external(实际上也不一定需要, 因为即使没有external, 也会被当做tentative definition).

    其实它完全不是这个意思, 对于变量(而不是函数), 它用于表示, 这里previous linkage, 也就是说, 如果已经有过声明了, 那么linkage遵循之前有的, 否则是external linkage.

    现来说为什么第一个会报错, static int i3 = 3; 就是定义, 同时指定了是internal linkage的. int i3;这是声明, 但声明出问题了, 因为none表示的是external linkage, 与static矛盾.

    之所以第二个不报错, 是因为external如前面所说, 是previous linkage, 它听已经有的, 那就没有矛盾了.

  • 相关阅读:
    SpringBoot介绍
    linux运行jar以及vi
    linux文件命名
    数据库 mysql
    SSM框架-Spring
    SSM框架-mybatis
    SSM框架-SpringMVC
    设计模式-策略模式
    设计模式-单例模式
    Java多线程实现和JUC介绍
  • 原文地址:https://www.cnblogs.com/Tokubara/p/14108860.html
Copyright © 2011-2022 走看看