기초용어 : 선언, 정의, 참조
선언: 함수의 서명(signature)을 작성
void print(); //<-- 선언
정의: 구현
void print(){ //<-- 정의
std::cout <<"hello" << std::endl;
}
참조:
extern은 **외부 선언(external linkage)**을 의미하며, 변수가 다른 파일에서 정의되었음을 알려주는 역할
변수에서의 extern: 참조
extern int globalVar; 변수는 다른 파일에서 정의되어 있으며, 이 파일에서는 그 변수를 참조한다는 뜻
함수에서의 extern: 선언
extern void myFunction();
함수는 extern을 생략하고도 선언할 수 있습니다.
namespace는 namespace 영역에서 extern scope를 갖음.
#ifndef __ns_h__
#define __ns_h__
namespace ns{
namespace siam{
extern int g_int;
}
}
#endif
namespace ns{
namespace siam{
int g_int = 10;
}
}
#include <iostream>
int in_def_cpp_int = 100;
void print(){
std::cout << in_def_cpp_int <<std::endl;
}
#include "ns.h"
#include <iostream>
extern int in_def_cpp_int;
extern void print();
extern int not_exitsts_int;
int main(){
std::cout << ns::siam::g_int << std::endl;
std::cout << in_def_cpp_int << std::endl;
in_def_cpp_int = 1000;
print();
std::cout << in_def_cpp_int << std::endl;
std::cout << not_exitsts_int << std::endl;
return 0;
}