程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 由實例淺析C中的static、extern、multiple definition of用法及陷阱

由實例淺析C中的static、extern、multiple definition of用法及陷阱

編輯:關於C語言

在JNI中,經常會遇到這種場景:想在一個.h文件中寫一些全局變量,然後所有的cpp文件都能夠使用。如下有個a.h文件:

/*
 * a.h
 *
 *  Created on: 2014-4-16
 *      Author: Administrator
 */

#ifndef A_H_
#define A_H_

int mAge = 0;
void setAge(int age);
int getAge();



#endif /* A_H_ */

裡面很簡單,有個變量mAge,兩個接口,設置和讀取。

下面是a.cpp文件:

/*
 * a.cpp
 *
 *  Created on: 2014-4-16
 *      Author: Administrator
 */

#include "a.h"
void setAge(int age){
	mAge = age;
}
int getAge(){
	return mAge;
}

然後有個main.cpp文件:

//============================================================================
// Name        : Test2.cpp
// Author      : yan
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include 
#include "a.h"
using namespace std;

int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
	setAge(22);
	cout<<"age = "<編譯後報錯:

E:\WorkSpaces\Eclipse_MinGW_C\Test2\Debug/../src/Test2.cpp:12: multiple definition of `main'
src\main.o:E:\WorkSpaces\Eclipse_MinGW_C\Test2\Debug/../src/main.cpp:13: first defined here
collect2.exe: error: ld returned 1 exit status
Build error occurred, build is stopped

報multiple definition of的錯誤,解決方法是將變量搞成static。搞成static確實不報錯了,但這裡卻隱藏著一個天大的陷阱:

main.cpp如下:

#include 
#include "a.h"
using namespace std;

int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
	setAge(22);
	cout<<"age = "<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved