最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

頭文件不宜定義變量的原因全面解析

 更新時間:2013年09月17日 10:26:24   作者:  
以下是對頭文件不宜定義變量的原因進行了詳細的分析介紹,需要的朋友可以過來參考下

test-1.0使用#ifndef只是防止了頭文件被重復包含(其實本例中只有一個頭件,不會存在重復包含的問題),但是無法防止變量被重復定義。

復制代碼 代碼如下:

# vi test.c
-------------------------------
#include <stdio.h>
#include "test.h"

extern i;
extern void test1();
extern void test2();

int main()
{
   test1();
   printf("ok\n");
   test2();
   printf("%d\n",i);
   return 0;
}


# vi test.h
-------------------------------
#ifndef _TEST_H_
#define _TEST_H_

char add1[] = "www.shellbox.cn\n";
char add2[] = "www.scriptbox.cn\n";
int i = 10;
void test1();
void test2();

#endif

# vi test1.c
-------------------------------
#include <stdio.h>
#include "test.h"

extern char add1[];

void test1()
{
   printf(add1);
}

# vi test2.c
-------------------------------
#include <stdio.h>
#include "test.h"

extern char add2[];
extern i;

void test2()
{
   printf(add2);
   for (; i > 0; i--)
       printf("%d-", i);
}


復制代碼 代碼如下:

# Makefile
-------------------------------
test:    test.o test1.o test2.o
test1.o: test1.c
test2.o: test2.c
clean:
   rm test test.o test1.o test2.o

錯誤:
test-1.0編譯后會出現(xiàn)"multiple definition of"錯誤。

錯誤分析:
由于工程中的每個.c文件都是獨立的解釋的,即使頭文件有
#ifndef _TEST_H_
#define _TEST_H_
....
#enfif
在其他文件中只要包含了global.h就會獨立的解釋,然后每個.c文件生成獨立的標示符。在編譯器鏈接時,就會將工程中所有的符號整合在一起,由于文件中有重名變量,于是就出現(xiàn)了重復定義的錯誤。

解決方法
在.c文件中聲明變量,然后建一個頭文件(.h文件)在所有的變量聲明前加上extern,注意這里不要對變量進行的初始化。然后在其他需要使用全局變量的.c文件中包含.h文件。編譯器會為.c生成目標文件,然后鏈接時,如果該.c文件使用了全局變量,鏈接器就會鏈接到此.c文件 。

test-2.0

復制代碼 代碼如下:

# vi test.c
-------------------------------
#include <stdio.h>
#include "test.h"

int i = 10;
char add1[] = "www.shellbox.cn\n";
char add2[] = "www.scriptbox.cn\n";
extern void test1();
extern void test2();

int main()
{
   test1();
   printf("ok\n");
   test2();
   printf("%d\n",i);
   return 0;
}


# vi test.h
-------------------------------
#ifndef _TEST_H_
#define _TEST_H_

extern i;
extern char add1[];
extern char add2[];

void test1();
void test2();

#endif

# vi test1.c
-------------------------------
#include <stdio.h>
#include "test.h"

void test1()
{
   printf(add1);
}

# vi test2.c
-------------------------------
#include <stdio.h>
#include "test.h"

void test2()
{
   printf(add2);
   for (; i > 0; i--)
       printf("%d-", i);
}


個人認為解決此類問題有幾種辦法:
1.在.cpp里定義變量,在其他調(diào)用處使用extern
2.在頭文件里使用宏定義

相關文章

  • Seesion在C++服務端的使用方法

    Seesion在C++服務端的使用方法

    這篇文章主要介紹了Seesion在C++服務端是怎么使用的?本文給出了解決方案和實例代碼供大家參考,需要的朋友可以參考下
    2020-02-02
  • C++使用ADO實現(xiàn)存取圖片的方法

    C++使用ADO實現(xiàn)存取圖片的方法

    這篇文章主要介紹了C++使用ADO實現(xiàn)存取圖片的方法,需要的朋友可以參考下
    2014-07-07
  • C++之Qt5雙緩沖機制案例教程

    C++之Qt5雙緩沖機制案例教程

    這篇文章主要介紹了C++之Qt5雙緩沖機制案例教程,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 純c語言優(yōu)雅地實現(xiàn)矩陣運算庫的方法

    純c語言優(yōu)雅地實現(xiàn)矩陣運算庫的方法

    本文主要介紹了純c語言優(yōu)雅地實現(xiàn)矩陣運算庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決gcc編譯報錯unknown type name ‘bool‘問題

    解決gcc編譯報錯unknown type name ‘bool‘問題

    這篇文章主要介紹了解決gcc編譯報錯unknown type name ‘bool‘問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • QT?.pro文件使用解析

    QT?.pro文件使用解析

    QT工程的pro文件,在創(chuàng)建工程時由QTCreater自動創(chuàng)建,我們可以往里面添加內(nèi)容,增加庫文件的聲明,包含路徑、預處理器定義,生成目錄,輸出中間目錄等等設置,本文就來介紹一下
    2022-04-04
  • C語言版五子棋游戲的實現(xiàn)代碼

    C語言版五子棋游戲的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C語言版五子棋游戲的實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法

    C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法

    本文主要介紹了C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C語言三種函數(shù)調(diào)用約定_cdecl與_stdcall及_fastcall詳細講解

    C語言三種函數(shù)調(diào)用約定_cdecl與_stdcall及_fastcall詳細講解

    本篇文章使用的工具是vs2010,內(nèi)容可能涉及到匯編的知識,建議有一些匯編基礎的再來看,不過沒有匯編基礎也沒有關系,了解一下這三種調(diào)用約定即可
    2022-10-10
  • QT修改項目名稱的圖文示例

    QT修改項目名稱的圖文示例

    本文主要介紹了QT修改項目名稱的圖文示例,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01

最新評論

澄江县| 横山县| 临沧市| 玉林市| 黎城县| 那曲县| 定西市| 岳普湖县| 巴中市| 武功县| 武冈市| 平谷区| 库车县| 兰溪市| 收藏| 衡阳县| 长沙县| 呼伦贝尔市| 革吉县| 阿尔山市| 翁源县| 友谊县| 黔南| 江北区| 榆中县| 郑州市| 莎车县| 建水县| 丰都县| 广德县| 桦甸市| 宕昌县| 万源市| 兖州市| 沛县| 大化| 和田市| 颍上县| 西和县| 松桃| 永康市|