프로그램들을 보면, 책에는 나와있지 않은 그런 code들이 많습니다.
제가 잘 모르는 것중에 대표적인 것으로
#pragma, using namespace 가 있습니다.
위 2가지의 용도가 무엇이며, 사용방법을 어떻게 되나요?
#pragma directive는 컴파일러에게 이런저런 설정(?)을 하는 지시자입니다.
주로 윈도 소스에서 많이 보이더군요.
자주 보이는 건 #pragma packed나 #pragma once입니다.
전자는 구조체 사이의 패딩 없이 메모리를 할당하는 것이고
후자는 includsion guard를 #ifndef #define #endif 세줄 말고 맨위에 저 한줄만 적어주면 동일하게 동작한다고 합니다.
나머지들도 다 컴파일러마다 다른 거라 그때그때 찾아보시는 것 외에는 방도가 없어보입니다.
c++엔 이름들이 이름공간안에 속해 있습니다. 그래서 cout도 그냥 쓰면 안되고 std::cout(std이름공간안에 있는 cout) 이라 써줘야 합니다. std 이름공간안의 것들을 많이 쓸 거 같으면 일일이 이름공간을 명시하기 귀찮으니깐 using namespace std로 std이름공간의 이름들을 다 불러옵니다.
using namespace std; 가 없이는 hello, world를 찍을 수 없기 때문에 아무 c++ 책에서나 꼭 나옵니다. "using"과 "using namespace"항목을 책에서 찾아보세요.
pragma 중에..
#pragma 지시어로 할 수 있는게 많지만;
네트워크 프로그래밍할 때 #pragma pack을 사용한 것 외에는
별로 써본 기억이 없네요-
컴파일러는 보통 최적화를 위해 구조체 같은 것들을 찍어낼 때
메모리 정렬을 해줍니다.
뭐 가령
뭐 이런게 있으면, char는 1바이트고 qoo는 4바이트일테구요. (보통)
일반적으로 4바이트로 정렬을 많이 하니까요. bar하고 qoo 사이의 3바이트를 알아서 컴파일러가 padding 해준답니다. 사용하지는 않는 영역인데 구조체 크기는 더 커지죠..
결과적으로 패킷 보내고 하면 기대했던 결과랑 다르게되고..
그래서 pragma pack 같은 지시어로 메모리 정렬을 안 하도록 지시해준다던가..
다른 용도도 많이 있지만 다른 분들께서 써주시겠죠? :)
Re: #pragma의 용도가 뭔가요?
#pragma directive는 컴파일러에게 이런저런 설정(?)을 하는 지시자입니다.
주로 윈도 소스에서 많이 보이더군요.
자주 보이는 건 #pragma packed나 #pragma once입니다.
전자는 구조체 사이의 패딩 없이 메모리를 할당하는 것이고
후자는 includsion guard를 #ifndef #define #endif 세줄 말고 맨위에 저 한줄만 적어주면 동일하게 동작한다고 합니다.
나머지들도 다 컴파일러마다 다른 거라 그때그때 찾아보시는 것 외에는 방도가 없어보입니다.
c++엔 이름들이 이름공간안에 속해 있습니다. 그래서 cout도 그냥 쓰면 안되고 std::cout(std이름공간안에 있는 cout) 이라 써줘야 합니다. std 이름공간안의 것들을 많이 쓸 거 같으면 일일이 이름공간을 명시하기 귀찮으니깐 using namespace std로 std이름공간의 이름들을 다 불러옵니다.
using namespace std; 가 없이는 hello, world를 찍을 수 없기 때문에 아무 c++ 책에서나 꼭 나옵니다. "using"과 "using namespace"항목을 책에서 찾아보세요.
컴파일러가 이해해야 하는, 이것저것 분류하기 어려운 잡다한 기능들을 모아
컴파일러가 이해해야 하는, 이것저것 분류하기 어려운 잡다한 기능들을 모아 둔 것이 #pragma 라고 이해하시면 되겠습니다. -_-;;
----
블로그 / 위키 / 리눅스 스크린샷 갤러리
댓글 달기