다른 cpp 파일에서 선언된 static const 변수 access

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

다른 cpp 파일에서 선언된 static const 변수 access

Post by 비회원 »

가령,

a.cpp 파일에 아래와 같이 static const 변수가 선언되어 있구요,

Code: Select all

static const float power[50] = {
                12,
	23,
	20,
                204.0f,
                504.0f
};


이녀석을 b.cpp 파일에서도 access하고 싶은데
b.cpp 파일에서 여러 방법을 써봐도 안되는 군요~

Code: Select all

extern const float power[50];  //link error
extern static const float[50];   //compile error

이럴 땐 어떻게 해야할까요?
조성경
Posts: 307
Joined: 2005-12-13 11:50

Post by 조성경 »

static을 빼세요.

ps. 왜 static을 붙이셨나요?
더 이상 이 곳에 오지 않습니다.
augustinus
Posts: 23
Joined: 2005-04-08 17:19
Location: 상장사

static 과 extern 변수의 동시 사용에.....

Post by augustinus »

static 으로 전역을 선언할 경우
해당 파일 내에서만 사용 가능합니다.
다른 파일에서 extern 을 선언하여 사용한다 할지라도
접근할 수 없습니다.

1) static을 빼고, extern을 사용하여 access하시던지
2) static이 선언된 녀석을 header 파일로 올려서
그 header를 include해서 사용하는 방법

이 있겠네요...
You should walk to talk~~~!
___________________________
조성경
Posts: 307
Joined: 2005-12-13 11:50

Re: static 과 extern 변수의 동시 사용에.....

Post by 조성경 »

augustinus wrote:...
2) static이 선언된 녀석을 header 파일로 올려서
그 header를 include해서 사용하는 방법
위험한 방법을 알려주시려고 하는군요.

Code: Select all

// header.h
static int value;

Code: Select all

// fileA
#include "header.h"

...

Code: Select all

//fileB
#include "header.h"

...
fileA와 fileB에서 value는 전혀 다른 변수 입니다. static을 빼면 컴파일 조차도

안되겠죠. 안되는 방법입니다.
더 이상 이 곳에 오지 않습니다.
비회원

Post by 비회원 »

static은 클래스 멤버에 붙이는 경우와, 전역변수에 붙이는 경우의 의미가 다릅니다.
static의 의미에 대해서 다시 알아보세요.
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Post by seeper »

The C++ Programming Language (곽용재역, 류광 대표 감수), 291 Page 에서 발췌했습니다.
C 및 구세대의 C++로 만들어진 프로그램에서는 "내부 링크관계를 설정한다"라는 의미로
static이란 키워드를 진짜 햇갈리게 사용하고 있다.
바라건데 static 키워드는 함수속과 클래스 속을 제외한 이외의 장소에서는 쓰지 않도록하자.
TC++PL 두꺼워도 정독해 볼만한 가치가 있는 책입니다. ^^
이제서야 읽고 있는데 의외의 것을 많이 배웁니다...
C++로 밥먹고 계신분은 필독서 입니다.
seeper0 (a) gmail.com [email주소 무단수집거부]
gimmesilver
Posts: 85
Joined: 2005-10-23 05:46
Location: NCsoft openmaru studio
Contact:

Post by gimmesilver »

seeper wrote:The C++ Programming Language (곽용재역, 류광 대표 감수), 291 Page 에서 발췌했습니다.
C 및 구세대의 C++로 만들어진 프로그램에서는 "내부 링크관계를 설정한다"라는 의미로
static이란 키워드를 진짜 햇갈리게 사용하고 있다.
바라건데 static 키워드는 함수속과 클래스 속을 제외한 이외의 장소에서는 쓰지 않도록하자.
TC++PL 두꺼워도 정독해 볼만한 가치가 있는 책입니다. ^^
이제서야 읽고 있는데 의외의 것을 많이 배웁니다...
C++로 밥먹고 계신분은 필독서 입니다.
그래서 요즘 C++ 전문가들은 internal linkage가 필요한 전역 변수의 경우 static 대신 이름이 없는 이름 공간을 이용하는 것을 추천하더군요.

Code: Select all

namespace {
  int x;
}
위와 같은 식으로 사용하면 static 전역 변수와 동일한 효과를 볼 수 있습니다.
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Post by seeper »

gimmesilver wrote:

Code: Select all

namespace {
  int x;
}
위와 같은 식으로 사용하면 static 전역 변수와 동일한 효과를 볼 수 있습니다.
역시나 The C++ Programming Language 에 나온내용이지만...
위의 코드는 아래와 같이 해석된답니다.
$$$는 하나의 해석단위 (하나의 cpp파일로 include까지 모두 끝난)에서만 사용가능한
namespace입니다.
( 뒤늦게 읽고 강추하는 책이 되어버렸습니다~~~ )

Code: Select all

namespace $$$ {
  int x;
}
using namespace $$$;

이책을 읽다보니...
http://gpgstudy.com/forum/viewtopic.php?topic=9027
여기서 소개된 책도 사고 싶네요.. 라고 이야기했지만 원서는... -_-;;;;
어쨌건 비야네 스트롭스트룹 아저씨의 마인드가 너무 좋습니다~~~
seeper0 (a) gmail.com [email주소 무단수집거부]
y2jinc2
Posts: 1
Joined: 2005-12-08 10:14
Location: 웹젠

Post by y2jinc2 »

cpp 에 static 을 붙이면 변수는 그 파일 내에서만 의미 있는 변수 입니다.

함수내에 static을 붙인 변수는 그 함수 내에서만 의미 있는 변수 입니다.

class 에 member 변수에 static을 붙이면 그 클레스 인스턴스에 유일하게 존재 하며

공유하는 변수가 됩니다.

더도 말고 덜도 말고 저거 뿐입니다.
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Post by seeper »

y2jinc2 wrote:cpp 에 static 을 붙이면 변수는 그 파일 내에서만 의미 있는 변수 입니다.

The C++ Programming Language (곽용재역, 류광 대표 감수), 1054 page에 나온 내용입니다.
해석단위에서 지역적인것을 나타내는 static의 용도는 C++에서 폐기예정 되었다.
C++에서 이런 의미를 표현하려면 이름 없는 네임스페이스를 쓰도록 한다.
제 생각은 기존의 프로젝트는 규칙을 지켜야 하니 어쩔수 없겠지만..
새로운 프로젝트나 새로 공부하시는 분은
아예 전역 static을 생각하지 않는 것이 좋을듯 합니다.
seeper0 (a) gmail.com [email주소 무단수집거부]
Locked