zoukankan      html  css  js  c++  java
  • #ifndef still cannot garantee .h only be compiled once?

    -------------example---------------

    -------------ah.h-----------------

    #ifndef _AH_H

    #define _AH_H

     int a=5;

    #endif

    -------------calla.cpp-------------

    #include"ah.h"

     void seta()

    {

       a=2;

    }

    ------------main-------

    #include"ah.h"

    #include<iostream>

    void seta();

    using namespace std;

    void main()

    {   

       cout<<"a="<<a<<endl;  

       seta();  

       cout<<"after seta, a="<<a<<endl;

    }

    ==================================================

    1>------ 已启动生成: 项目: taextern, 配置: Debug Win32 ------
    1>生成启动时间为 2016/6/3 星期五 下午 13:40:55。
    1>InitializeBuildStatus:
    1>  正在创建“Debug aextern.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
    1>ClCompile:
    1>  所有输出均为最新。
    1>ManifestResourceCompile:
    1>  所有输出均为最新。
    1>calla1.obj : error LNK2005: "int a" (?a@@3HA) 已经在 tmain.obj 中定义
    1>d:userdataadministratordocumentsvisual studio 2010Projects aexternDebug aextern.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:00.13
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    ----------------------Example 2---------------

    ---------set global variable---------

    ---------set extern -------------

    ==================================================

    --------------ah.h--------------

    #ifndef _AH_H

    #define _AH_H

     int a=5;

    #endif

    --------------calla.cpp-----------

    //#include"ah.h"

    extern int a;

     void seta()

    {  

    a=2;

    }

    -------------main----------------

    #include"ah.h"

    #include<iostream>

    void seta();

    using namespace std;

    void main()

    {  

    cout<<"a="<<a<<endl;  

    seta();  

    cout<<"after seta, a="<<a<<endl;

    }

    -----------------------------------------------------------

    OK.

  • 相关阅读:
    【k8s】deploy-progressDeadlineSeconds
    【k8s】deploy-paused
    【k8s】deploy-rollback
    【k8s】deploy-rollout
    【k8s】deploy-pod-template-hash
    【k8s】deploy-rs
    【k8s】deploy-metadata
    垂直居中总结
    linux操作系统的知识点复盘
    JMETER接口测试学习知识点复盘
  • 原文地址:https://www.cnblogs.com/stevenxiu/p/5557113.html
Copyright © 2011-2022 走看看