AI 뉴스

C로 장난치기, &((int*)-8)[3] 편 — 토큰 예측 능력 연마용 코드 조각 읽기

노동1호 2026. 6. 9. 06:04
C 언어 토큰 예측 능력 연마용 코드 조각 - 함수 정의, 연산자 우선순위, goto, 세기와 더하기

C로 장난치기, &((int*)-8)[3] 편 — 토큰 예측 능력 연마용 코드 조각 읽기

C 언어를 깊이 알수록 겉보기엔 "뻔한" 설명 아래에 한 겹이 더 있다는 사실이 드러납니다. lcamtuf가 연재하는 C 기초 네 번째 글은 함수 정의, 연산자 우선순위, goto 문, 세기와 더하기 네 영역을 장난스러운 코드 조각으로 풀어냅니다. 초보 챗봇뿐 아니라 숙련된 코딩 에이전트에게도 토큰 예측 능력 연마를 권하는 도입으로 시작합니다. 결국 우리에게 남는 건 두 가지입니다. 첫째, 표준은 겉보다 두껍다는 점. 둘째, 도구를 정확히 다루려면 그 아래 한 겹을 직접 들여다봐야 한다는 점입니다.

함수 정의 — 전방 선언으로 컴파일 오류 줄이기

C에서 함수 정의를 깔끔히 다루려면 가능하면 전방 선언을 사용하라는 조언이 먼저 나옵니다. main을 미리 선언하면 demo 코드가 짧아집니다. 컴파일러가 타입을 먼저 확인할 수 있습니다. 예시는 다음과 같습니다.

void main() void;void; { puts("hello world"); }

K&R 문법처럼 보이지만 GCC는 기본적으로 K&R을 거부합니다. 매개변수 이름을 붙이지 않으면 예외가 생긴다는 점도 흥미로운 부분입니다. 작은 디테일 하나가 컴파일러의 반응을 바꿉니다.

연산자 우선순위 — &&가 &보다 엄격한 사실

산술 연산에는 잘 정의된 우선순위가 있습니다. 모든 소프트웨어 엔지니어는 &&&보다 엄격한 우선순위를 가진다는 점을 기억해야 합니다. 한 줄짜리 예제보다 우선순위 함정을 손으로 짚어보게 만듭니다. 예시 코드는 다음과 같습니다.

int typedef[[]]$;[[]]$:$&&$&&$&&puts("hello world");

이런 코드는 결국 토큰을 하나씩 예측해 읽는 훈련이 됩니다. 작은 demo가 우선순위 감각을 길러 줍니다.

goto 문 — 함수 대신 무조건 점프

C는 보통 함수에 의존합니다. 그래서 함수형 프로그래밍 언어 범주에 속한다는 표현이 등장합니다. 그다음 성능상의 이유로 가끔 무조건 점프를 사용해 프로그램을 구성하는 흐름이 이어집니다. 예시는 다음과 같습니다.

goto *puts("Hello world"), puts("Goodbye world"), exit;

이는 계산된 goto입니다. 컴파일러는 goto *(a, b, c)로 해석합니다. 흥미로운 점도 있습니다. 쉼표가 *보다 우선순위가 높아 goto *a, b, cgoto (*a), (b), (c)가 된다는 사실입니다. 손으로 따라가 보면 보이는 함정입니다.

세기와 더하기 — union과 후위 증가, 포인터 형변환

프로그램이 1부터 세어야 하는 상황이 있습니다. 강건한 접근 방식의 예제로 union 배열과 후위 증가를 함께 씁니다.

union {} var[100] = {}; i++; var[42]

덧셈도 비슷한 방식으로 다룰 수 있습니다. 특정 타입의 2에 대해 2 + 2 결과를 표시하는 demo는 다음과 같습니다.

typedef union {}* my_type;(my_type)2 + 2

포인터 형변환을 덧셈에 끼워 넣는 발상이 이 연재의 핵심 장난입니다. 짧은 코드가 큰 통찰을 만듭니다.

그래서 우리도 따라 할 수 있는가

C 표준은 아니지만 tcc가 받아들이는 또 다른 재미있는 예시가 있습니다. K&R 선언과 섞으면 더 우스워집니다.

typedef int t(); t main { puts ("hello world"); };typedef t(main); t main t main; { t(main); }

이런 코드는 실무에서 쓸 일은 거의 없습니다. 하지만 토큰을 하나씩 읽으며 컴파일러의 해석을 예측하는 훈련용으로는 충분합니다. 결국 C를 더 알아갈수록 Go가 좋아지는 이유도 자연스럽게 이해하게 됩니다. 디버거에 한 줄씩 넣고 결과를 확인하는 작은 실험이 가장 빠른 학습 경로입니다. 그래서 우리도 따라 해볼 만합니다.