2005년 6월 9일 목요일

C, C++ extern const variable 사용하기

. C언어 일 때 (gcc 2.9, 3.x 로 컴파일함)
[ilashman@ob test_extern]$ cat a.h
#ifndef A_H
#define A_H
int a;
#endif /* A_H */
[ilashman@ob test_extern]$ cat b.h
#ifndef B_H
#define B_H
#include <stdio.h>
void func();

void func2()
{
    printf("b.h a :  %d\n", a);
    printf("b.h &a :  %p\n", &a);
}
#endif /* A_H */
[ilashman@ob test_extern]$ cat a.c
#include "a.h"
#include "b.h"
#include <stdio.h>

extern int a;

int main()
{
    a = 3;
    printf("hi\n");
    printf("a.c a : %d\n", a);
    printf("a.c &a : %p\n", &a);

    func();
    func2();

    return 0;
}
[ilashman@ob test_extern]$ cat b.c
#include "a.h"
#include "stdio.h"

extern int a;

void func()
{
    printf("b.c a : %d\n", a);
    printf("b.c &a : %p\n", &a);
}
[ilashman@ob test_extern]$ cat Makefile
all:a

a:
        gcc a.c b.c -o a -g -Wall

clean:
        \rm a
[ilashman@ob test_extern]$ ./a
hi
a.c a : 3
a.c &a : 0x8049600
b.c a : 3
b.c &a : 0x8049600
b.h a :  3
b.h &a :  0x8049600

-------------------------------------------
C와 C++에서는 extern, extern const를 쓰는 용법이 각자 다르다.

. C++의 경우 Visual Studio .NET 2003에서 테스트 함.
. C++ extern variable
. header에는 아무 것도 적지 않는 다.
. 한 cpp 파일
const int x = 10;
. 다른 모든 cpp 파일
extern int x;

. C++ extern const variable (extern variable과는 다르다.)
. header에는 아무 것도 적지 않는 다.
. 한 cpp 파일
extern const int x = 10;
. 다른 모든 cpp 파일
extern int x;
-------------------------------------------
extern을 쓰지말고 namespace를 쓴다.
namespace는 파일에 관계 없이 같은 scope가 유지된다.

. 참고
google, MSDN -> extern const, constant values
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_langref_constant_values.asp

댓글 없음:

댓글 쓰기