Note > cppextern, namespace, scope
By a3040, Published on Invalid Date
기초용어 : 선언, 정의, 참조
선언: 함수의 서명(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를 갖음.
//ns.h
#ifndef __ns_h__
#define __ns_h__
namespace ns{
namespace siam{
extern int g_int;
}
}
#endif
//ns.cc
namespace ns{
namespace siam{
int g_int = 10;
}
}
//def.cc
#include <iostream>
int in_def_cpp_int = 100;
void print(){
std::cout << in_def_cpp_int <<std::endl;
}
//main.cc
#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 << 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;
// std::cout << ns::siam::g_int << std::endl;
return 0;
}
//cmake
//add_executable(nsmain ./ns/ns.h ./ns/ns.cc ./ns/def.cc ./ns/main.cc )