程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C和C++全局變量的一些細節問題

C和C++全局變量的一些細節問題

編輯:C++入門知識

 

c++中的全局變量

1.可以定義的位置

  main函數所在文件的函數體外

  其它cpp文件的函數體外

 不能放在h文件中,因為h文件可能會有多次引用,會爆重復定義

2.引用方式,c++裡面

  通過extern 加變量的定義語句的方式 這樣所有引用的這個變量只會是一個值

 

c中的全局變量

  1.可以定義的位置

  main函數所在文件的函數體外

  其它cpp文件的函數體外

  不能放在h文件中,因為h文件可能會有多次引用,會爆重復定義

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

為什麼可以這樣使用?

  編譯分為編譯和鏈接過程。

  每個c,cpp對應一個文件,雖然在外面是不能看見,但是如果使用了extern的話,鏈接器會將同一名字的變量鏈接到一個地址,大約是在文件的某個段裡面。

  因為c++的語法要求更嚴格,所以要求extern的變量和原變量必須有相同的聲明,而c其實就是匯編語言沒什麼區別,更在乎的是變量的長度,對應類型沒有做更多的檢查。

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

 

附錄:

 

c++代碼

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

 main.h

 

#ifndef _MAIN_H_

#define _MAIN_H_

int g_value = 10;

class b

{

public:

    int _value;

    void good();

};

#endif

 

main.cpp

 

#include "main.h"

#include <iostream>

void b::good()

{

    //std::cout<<g_value<<std::endl;

}

 

good.cpp

 

#include <iostream>

#include "main.h"

using namespace std;

extern int g_value;

//int g_value;

int main()

{  

     b obj_b;

    cout<<"old g_value:"<<g_value<<endl;

     obj_b.good();

    g_value = 0x10;

    cout<<"new g_value:"<<g_value<<endl;

       obj_b.good();

    system("pause");

 

}

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

 

 c代碼

 

main.h

 

 

#ifndef _MAIN_H_

#define _MAIN_H_

void good();

#endif

 

 

main.c

 

 

#include "main.h"

#include <stdio.h>

int g_value = 10;

void good()

{

    printf("main.c print %d\n", g_value);

}

 

 

good.c

 

#include <stdio.h>

#include <stdlib.h>

#include "main.h"

extern char g_value;

//extern int g_value; 注意類型不一樣在c裡面是不會爆編譯錯誤的

 //int g_value;

int main()

{  

    printf("old value:%d\n", g_value);

    g_value =0x10;

    printf("new value:%d\n", g_value);

    system("pause");

 

}

摘自 RunBoying

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved