반응형

C 3

[C언어] a - b < 0 vs. a < b

너무 간단한 건데, 이런걸 한번에 캐치하지 못했다. 수학시간에 배운데로 a -b < 0 은 a < b와 다를 바 없다. 하지만 프로그래밍 언어에서는? 꼭 그렇지는 않다. 위 간단한 코드를 출력해보면 무엇이 나올까? 출력 결과는 a < b [end] 가 된다. 어찌 보면 당연한건데 막상 프로젝트에서 접하면 쉽게 발견하기 어려운 버그가 된다. unsigned 인 a 와 b의 차를 계산하여 나온 결과가 음이 되므로 오버플로우에 의해서 a - b는 양이 된다. 이런 코딩을 하진 않겠지만 눈에도 익혀서 디버깅을 할 때 쉽게 찾을 수 있도록 노력해야겠다.

C로 수행시간 체크하기

간단하게 수행시간 체크하는 매크로를 만들어보았다.### c++ #ifdef _WIN32 #define ENTER { \ LARGE_INTEGER begin, end, freq; \ QueryPerformanceFrequency(&freq); \ QueryPerformanceCounter(&begin); #define LEAVE \ QueryPerformanceCounter(&end); \ double elapsed_time = (double)(end.QuadPart - begin.QuadPart) / freq.QuadPart; \ printf("%s:%d] %3.2f elapsed\n", __FUNCTION__, __LINE__, elapsed_time); \ #else #include #define E..

Header안에 static 변수

C++에서 static을 다소 헷갈리게 만드는 요소가 있긴 하지만, header에서 static 변수를 선언해서는 안된다. static : 지역 변수임을 알려주는 키워드 (C++ 클래스 내부의 static과 다른 의미이다.) 헤더에서 static을 선언하면 어떤 일이 일어날까? 간단한 예제를 만들어보았다. (컴파일 없이 손코딩했음) common.h static int gvalue = 10; main.c #include #include "common.h" #include "b.h" int main () { printf("%d\n", gvalue); call_b(); printf("%d\n", gvalue); return 0; } b.h void call_b(); b.c #include "common.h" ..

반응형