. 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
댓글 없음:
댓글 쓰기