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

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

운영자: 류광

Locked
비회원

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

전체글 글쓴이: 비회원 » 2006-01-11 11:59

가령,

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

코드: 모두 선택

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


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

코드: 모두 선택

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

이럴 땐 어떻게 해야할까요?

조성경
전체글: 307
가입일: 2005-12-13 11:50

전체글 글쓴이: 조성경 » 2006-01-11 12:08

static을 빼세요.

ps. 왜 static을 붙이셨나요?
더 이상 이 곳에 오지 않습니다.

사용자 아바타
augustinus
전체글: 23
가입일: 2005-04-08 17:19
사는 곳: 상장사

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

전체글 글쓴이: augustinus » 2006-01-11 12:23

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

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

이 있겠네요...
You should walk to talk~~~!
___________________________

조성경
전체글: 307
가입일: 2005-12-13 11:50

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

전체글 글쓴이: 조성경 » 2006-01-11 12:32

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

코드: 모두 선택

// header.h
static int value;

코드: 모두 선택

// fileA
#include "header.h"

...

코드: 모두 선택

//fileB
#include "header.h"

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

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

비회원

전체글 글쓴이: 비회원 » 2006-01-11 12:36

static은 클래스 멤버에 붙이는 경우와, 전역변수에 붙이는 경우의 의미가 다릅니다.
static의 의미에 대해서 다시 알아보세요.

seeper
전체글: 1483
가입일: 2003-06-06 23:19
연락처:

전체글 글쓴이: seeper » 2006-01-11 14:47

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

gimmesilver
전체글: 85
가입일: 2005-10-23 05:46
사는 곳: NCsoft openmaru studio
연락처:

전체글 글쓴이: gimmesilver » 2006-01-11 23:56

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

코드: 모두 선택

namespace {
  int x;
}
위와 같은 식으로 사용하면 static 전역 변수와 동일한 효과를 볼 수 있습니다.

seeper
전체글: 1483
가입일: 2003-06-06 23:19
연락처:

전체글 글쓴이: seeper » 2006-01-12 11:59

gimmesilver 작성:

코드: 모두 선택

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

코드: 모두 선택

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

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

y2jinc2
전체글: 1
가입일: 2005-12-08 10:14
사는 곳: 웹젠

전체글 글쓴이: y2jinc2 » 2006-01-12 13:58

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

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

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

공유하는 변수가 됩니다.

더도 말고 덜도 말고 저거 뿐입니다.

seeper
전체글: 1483
가입일: 2003-06-06 23:19
연락처:

전체글 글쓴이: seeper » 2006-01-12 22:38

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

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

Locked

접속 중인 사용자

이 포럼을 보고 있는 사용자: 회원 0 명, 손님 3 명