c++ 에서 static 변수를 가진 C 함수 호출하기
글쓴이: seacloud / 작성시간: 금, 2009/07/10 - 10:03오전
안녕하세요,
C++ 상에서 static 변수를 가진 C 함수를 호출하여 사용하는 도중 궁금한 것이 생겨서 질문을 드립니다.
A와 B 라는 각각의 class 에서 D라는 c 기반의 함수를 사용합니다.
int D(int i){
static int a = 0;
if(i)
a = i;
else
return a;
}
A class 의 Aa라는 메소드 안에서
void A::Aa(void) {
D(3);
}
B class 의 Bb라는 메소드 안에서
void B::Bb(void) {
D(2);
}
이런식으로 사용을 하게되면
A class 와 B class에서 호출하는 D함수가 각각 다른 함수로 인식되는 것 같은데
{A class의 Aa()실행후 B class의 Bb()실실행 시 static 변수 a의 값이 Aa()에서 입력한 3이 아닌 초기값 0인 상태입니다.)(
왜 이런 현상이 나오는지 알려주시면 감사하겠습니다.
Forums:
어디서 확인하셨나요?
디버깅으로 확인하셨나요??
그럴리가 없을텐데요.
위 프로그램을 좀 고쳐서.다음과 같이 실행해보세요
#include
int D(int i);
class A {
public:
int Aa();
};
class B {
public:
int Bb();
};
int D(int i)
{
static int a = 0;
a += i;
return a;
}
int A::Aa(void) {
return D(3);
}
int B::Bb(void) {
return D(2);
}
int main(void)
{
A a;
B b;
printf("%d\n", a.Aa());
printf("%d\n", b.Bb());
return 0;
}
---------------------------------
결과
---------------------------------
3
5
---------------------------------
다시 확인해보셔야할듯
제가 쓴 코드로 이해해보시면 이해가 되실듯하군요.
제가 알고있는것은 static 은 말그대로 정적이라고하여 컴파일러가 일반 변수영역들을 읽어들이기전에 먼저 static을
메모리에 올려 넣는걸로 알고 있습니다.
이후에 지역함수가 끝난다고 하여도 프로그램이(main()이라고 이해하고있습니다.) 끝나기 전까지 계속 존재하여 데이터를 저장합니다.
어떤 글을 보고 이해한것이라서 다른분이 더 정확히 설명해주시면 감사하겠네요 :)
#include
using namespace std;
class A{
public:
void Aa(void);
};
class B{
public:
void Bb(void);
};
int D(int i){
static int a = 0;
cout << "static int =>" << a << endl;
a=i;
return a;
}
//A class 의 Aa라는 메소드 안에서
void A::Aa(void) {
cout << D(3) << endl;
}
//B class 의 Bb라는 메소드 안에서
void B::Bb(void) {
cout << D(2) << endl;
}
int main()
{
A *classA = new A;
B *classB = new B;
classA->Aa();
classB->Bb();
return 0;
}
댓글 달기