程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 頭文件不宜界說變量的緣由周全解析

頭文件不宜界說變量的緣由周全解析

編輯:關於C++

頭文件不宜界說變量的緣由周全解析。本站提示廣大學習愛好者:(頭文件不宜界說變量的緣由周全解析)文章只能為提供參考,不一定能成為您想要的結果。以下是頭文件不宜界說變量的緣由周全解析正文


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編譯後會湧現"multiple definition of"毛病。

毛病剖析:
因為工程中的每一個.c文件都是自力的說明的,即便頭文件有
#ifndef _TEST_H_
#define _TEST_H_
....
#enfif
在其他文件中只需包括了global.h就會自力的說明,然後每一個.c文件生成自力的標示符。在編譯器鏈接時,就會將工程中一切的符號整合在一路,因為文件中有重名變量,因而就湧現了反復界說的毛病。

處理辦法
在.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裡界說變量,在其他挪用處應用extern
2.在頭文件裡應用宏界說

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