C 언어 트릭
==과 =의 오타를 피하는 방법
==과 =의 오타를 피하는 방법
2016.12.23==과 =의 오타를 피하는 방법다음과 같은 소스코드가 있다고 해봅시다.if (num == 10) printf("num은 10입니다. \n");cs만약, 이 코드를 잘못입력해서 if (num = 10)과 같이 입력을 했을 때 문법적으로는 틀린 것이 없으므로 문법 오류가 발생하지 않아서 발견하기가 상당히 어려운 언어가 됩니다.하지만, if (10 == num)으로 순서만 바꾸면 문법적으로는 아무런 이상이 없으며, ==를 잘 못 입력해서 =으로 입력했을 시 if (10 = num)이 되어서 문법 오류가 발생하므로 논리에러를 잡아내는 데 유용합니다.
임시변수 없이 swap 구현하기
임시변수 없이 swap 구현하기
2016.12.22임시변수 없이 swap 구현하기먼저 이 방법을 알려주는 것은, 이 것이 위험하기 때문에 지양해야 한다는 것을 알리기 위함입니다.먼저, 그 방법을 소개해보면 #define SWAP(x, y) {(x)^=(y)^=(x)^=(y);} 이와 같은 매크로가 정의되어 있다고 해봅시다.int main() { int x = 10; int y = 20; printf("X = %d, Y = %d", x, y); x ^= y ^= x ^= y; //SWAP(x, y); printf("X = %d, Y = %d", x, y); return 0;}Colored by Color Scriptercs위의 코드와 같이 매크로가 풀리게 될 텐데, 이것을 하나씩 뜯어보면 제일 위의 것부터 x ^= y; -> x = x ^ y; 그러면 x..
do { ... } while(0) 을 사용하는 이유
do { ... } while(0) 을 사용하는 이유
2016.12.21do { ... } while(0) 을 사용하는 이유원문 : https://kernelnewbies.org/FAQ/DoWhile0리눅스 커널 등의 소스 코드를 보게 되면, "do { ... } while(0)"과 같은 것을 많이 씁니다. 당연히 중괄호 안의 내용이 한 번만 실행되고 끝나는 프로그램인데, 왜 이렇게 만들었을까요?다음과 같은 이유가 있습니다. ▶ Miller : 빈 구문(empty statement)는 컴파일러가 경고를 냅니다. ▶ Miller : 지역 변수를 선언할 수 있는 구역을 만들어줍니다. ▶ Collins : 조건문을 포함한 코드에서 복잡한 형태의 매크로를 사용할 수 있도록 해줍니다.#define FOO(x) \ printf("arg is %s\n", x); \ do_somethin..