본문 바로가기

C/C++26

#pragma를 이용해 바이트 처리단위 변경하기 #include #define _PRAGMA_TEST_ // 이 줄을 주석처리 하느냐 안하느냐에 따라 결과값이 바뀐다. #ifdef _PRAGMA_TEST_ #pragmapack(push, 1) #endif typedef struct tagTest { char cChar; short sShort; int nTest; } TagTest; #ifdef _PRAGMA_TEST_ #pragma pack(pop) #endif int main() { printf("%d", sizeof(TagTest)); getchar(); return 0; } PRAGMA_TEST를 정의하면, 한마디로 pragma pack(push, 1)이 세팅되면, 바이트 처리단위가 1이 되어 구조체의 크기가 7이된다. 정의하지 않으면 32bi.. 2008. 8. 28.
C함정과 실수 C 함정과 실수 (버그없는 프로그램 만들기) 상세보기 앤드류 쾨니히 지음 | 피어슨에듀케이션코리아 펴냄 C 프로그래머들이 쉽게 빠지거나 저지를 수 있는 함정과 실수를 다양한 예제를 통해 보여주면서 버그를 사전에 막을 수 있는 방법을 제시한다. 또한 하나 차이로 인한 오류 피하기, 함수 선언의 이해 및 작성, 포인터와 배열의 미묘한 관계에 대해서도 다룬다. 오랫동안 쌓아온 저자의 C 프로그래밍 경험을 담은 이 책은 C 언어 초보자나 전문가가 반드시 알아야 할 필수 요소를 정확하게 보여주고 있다. 얇아서 좋다! ㅋ 그리고 내가 프로그래밍 생초짜(지금도 초짜수준이긴 하다-_-)일 때, 툭하면 했던 실수들, 그리고 내가 이해할 수 없었던 버그들 지금에서야 '음... 그래서 그런거였군' 하며 고개를 끄덕거리게 하.. 2008. 7. 15.
[펌]20가지 C++ 팁 [원문] http://decoder.tistory.com/547 http://www.devx.com/cplus/Article/16328 The Top 20 C++ Tips of All 대신 을 써라.기존 legacy코드를 다루거나 하지 않는다면 비표준 보다는 을 쓰는 것이 좋다. 두 구현은 차이가 있으므로 한 코드에 둘 모드를 쓸 수 없다. RValue에 레퍼런스 바인딩하기레퍼런스를 const 타입으로 한다면 rvalue에 레퍼런스를 결합하는 것을 허용한다. void f(const int &i); int main() { f(2); /* OK */ } f(2) 호출시 값으로 2를 가지는 int 타입의 임시 객체가 만들어지고, 이것이 i 레퍼런스에 결합됨. 그런데 f() 함수에서 i를 변경하면??? 그래서 .. 2008. 7. 15.
[펌]변수의 선언과 할당 모든 자료형(변수)의 선언 구조는 (기억클래스) -> (형수식자) -> (자료형) -> (변수리스트;) 의 순서로 이루어집니다. auto(기억클래스) volatile(성질 형수식자) int(integer 자료형) A(변수명) 이지요. 그런데 이렇게 복잡하게 안쓰고 int A; 라고 해도 가능한 이유는 기억클래스나 형수식자는 생략이 가능하기 때문입니다. “생략 가능한데 뭐하라 만들었냐~” 라고 생각하시는 분을 위하여 뒷부분에 자세하게 설명드리겠으며 이게 이 글의 핵심~! 입니다. 여기쯤 읽다가 “시방 지금 뭔 말이여~! (ㅡㅡ+)” 하며 창을 닫으시려는 분이 있을까봐. 이쯤에서 우선 (기억클래스), (형수식자)에 대하여 간략하게 설명을 드리겠습니다. 기억 클래스 : static, auto, extern, .. 2008. 7. 11.