Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 퍼즐: 연산자 없이 두 숫자를 하나로 합치는 방법

오늘은 흥미로운 C 언어 퍼즐 문제를 살펴보겠습니다. 두 개의 숫자 4896이 주어졌다고 가정해 봅시다. 이때 첫 번째 숫자를 두 번째 숫자 뒤에 붙여서 최종적으로 9648이라는 결과를 만들어야 합니다.

문제는 여기서 끝나지 않습니다. 논리 연산, 산술 연산, 문자열 관련 연산은 물론, 미리 정의된 함수도 전혀 사용할 수 없다는 제약 조건이 있습니다. 과연 어떻게 이 문제를 해결할 수 있을까요?

해결 방법: 토큰 붙여넣기 연산자(##)

의외로 간단합니다. 바로 C 언어의 토큰 붙여넣기 연산자(Token Pasting Operator, ##)를 활용하면 됩니다.

토큰 붙여넣기 연산자는 전처리기(preprocessor) 연산자의 일종으로, 컴파일러에게 두 개의 토큰을 하나로 결합하거나 연결하라는 명령을 전달하는 역할을 합니다. 이 연산자는 매크로 정의 시에 사용되며, 매크로가 확장되는 과정에서 인수로 전달된 토큰들이 서로 붙어 하나의 새로운 토큰이 됩니다.

예제 코드

#include<stdio.h>
#define MERGE(x, y) y##x
main() {
   printf("%d", MERGE(48, 96));
}

실행 결과

9648

코드 설명

위 코드에서 MERGE(x, y) 매크로는 y##x로 정의되어 있습니다. 따라서 MERGE(48, 96)이 호출되면 전처리기가 이를 9648이라는 단일 토큰으로 치환합니다. 그 결과 별도의 산술 연산이나 문자열 처리 없이도 두 숫자가 자연스럽게 하나로 합쳐진 것을 확인할 수 있습니다.

이처럼 전처리기 연산자를 잘 활용하면 일반적인 방법으로는 어려운 작업도 컴파일 시점에 손쉽게 처리할 수 있습니다.