레이블이 c인 게시물을 표시합니다. 모든 게시물 표시
레이블이 c인 게시물을 표시합니다. 모든 게시물 표시

2016년 2월 4일 목요일

#define BITS_TO_BYTES(bits) ((bits)/8 + !!((bits)%8))

C에서 비트필드배열 만들 때 쓸만할 것 같음.
#define BITS_A 5
#define BITS_B 3
#define BITS_C 2
char bitfield[BITS_TO_BYTES(BITS_A + BITS_B + BITS_C)];

2012년 7월 9일 월요일

list_entry 매크로

#define list_entry(ptr, type, member) \
  ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

리눅스 커널에 사용된 링크드리스트에서 제공하는 매크로. list_node 포인터로부터 원래 구조체의 포인터를 얻기 위해 사용한다.

2011년 10월 12일 수요일

define extern

#define extern
#include "externs.h"

externs.h에 선언된 extern 변수의 정의위치를 찾으려는데 도저히 찾을 수 없는가? 위처럼 되어 있지는 않은지 찾아보라. 누군가는 이렇게라도 중복을 제거하고 싶었을지 모른다. (혹시 따라하는 사람 없겠지?)

2011년 9월 7일 수요일

bsearch

void * bsearch ( const void * key, const void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

잘 쓰이지는 않지만 이미 구현되어 있다! C의 한계 덕분에 인자는 다섯 개나 되고, 그 중 두 개는 void *, 하나는 void* 두개를 받는 함수 포인터라는 정말 못생긴 모양을 갖게 되었지만... 직접 구현하거나 구글에서 출처를 알 수 없는 코드를 복사하여 붙여넣기보다는 그냥 구현되어 있는 것을 이용하는 것은 어떨까?

--코드리뷰하다가

2011년 9월 1일 목요일

compare ints

return v1 - v2;

정수형의 비교함수를 구현할때 간단하게 이렇게 했던적이 많았는데, v1이 큰 양수고 v2가 큰 음수라고 하면 오버플로가 발생하여 잘못된 결과를 가져올 수 있다.

-- 'the Practice of Programming' 에서

Hello world

printf("Hello world");

이 한줄을 시작으로 참 많은 코드를 작성해왔다. 물론 내가 처음 돌려본 프로그램은 기억도 잘 나지 않는 BASIC 프로그램이었지만 C를 배우면서 처음으로 프로그램을 배운것 같다.