September 27, 2008

C Pre-Processors

일단, 잘 알려진 아래의 Pre-Processors를 나열해 보면 아래와 같다.

#include, #define, #undef

#ifdef, #ifndef, #if, #else, #elif, #endif

아래의 두 Pre-Processors는 설명이 좀 필요하다.

1. #
Stringization으로 불린다. 먼, 사용하는 예를 보면 아래와 같다.

source
#define PRINT_DEFINITION(a, b) printf(#a " is " #b ".\n");

PRINT_DEFINITION(Love, Everything);
result
Love is Everything.
이처럼, #은 Pre-Processor에 인자로 들어온 값을 constant string으로 만들어주는 역할을 한다.

2. ##
이 Pre-Processor는 {Token Pasting | Token Concatenation | Token Merge | Merge} Operator등 다양하게 불리우는 것 같다. 어떤 이름이 정식 이름인지는 잘 모르겠다. 일단 사용 예부터 보자.

source
#define FUNC_SIZE(a) sizeof(func##a)

struct func1 {
int a;
int b;
char *c;
};

struct func2 {
char *a;
int b;
};

printf("func1 size: %d, func2 size: %d\n", FUNC_SIZE(1), FUNC_SIZE(2));

result
func1 size: 12, func2 size: 8

짧고 좋은 예가 생각이 안나서 예제가 조금 유치하다. 예에서 볼 수 있듯이, token merge operator는 Pre-Processor에서 두 글자를 하나의 인자로 이어주는 역할을 한다.

September 26, 2008

Java와 C간의 socket 통신시 주의할 사항

Java는 platform과 상관없이 무조건 big-endian으로 데이터를 처리하는 반면에 C는 platform에 따라서 big-endian과 little-endian이 달라진다.따라서 java에서 ByteBuffer의 order()함수를 이용하여 endian을 맞추든, C에서 맞추든 endian을 통일시켜야, socket 통신을 원하는 결과를 얻을 수 있다.

September 12, 2008

Firefox Shortcut Keys


CTRL+N새로운 창 열기
CTRL+R현재 page 다시 불러오기
ALT+←이전 page로 돌아가기
ALT+→다음 page로 돌아가기
ALT+HOMEHome page로 돌아가기
CTRL+k검색어 입력창으로 이동
ALT+dURL 입력창으로 이동
CTRL+ENTER입력한 URL 앞에 "http://www.", 뒤에 ".com"을 붙여준다.
CTRL+T새로운 Tab 열기
CTRL+W현재 Tab 닫기
CTRL+SHIFT+T닫은 Tab 되돌리기
CTRL+TAB다음 Tab으로 이동
CTRL+SHIFT+TAB이전 Tab으로 이동
CTRL+[0-9]1번째 Tab부터 10번째 Tab까지 바로 이동
/입력하는 글자에 해당하는 글자로 이동
'입력하는 글자에 해당하는 link로 이동
CTRL+G다음 글자 or link로 이동
CTRL+SHIFT+G이전 글자 or link로 이동