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

C언어에서 세미콜론 없이 'Tutorials Point'를 출력하는 프로그램 작성법

이 문제에서는 세미콜론(;)을 사용하지 않고 'Tutorials Point'를 출력하는 프로그램을 작성해야 합니다.

C언어에서는 하나의 문장(statement)을 끝맺기 위해 반드시 세미콜론이 필요하다는 것은 기본적인 상식입니다. 일반적으로 printf 문 역시 끝에 세미콜론이 붙어야만 비로소 실행됩니다.

그렇다면 세미콜론 없이 문자열을 출력하려면 어떻게 해야 할까요? 해답은 printf 함수의 반환값에 숨어 있습니다. printf 함수는 화면에 문자열을 출력한 뒤, 실제로 출력된 총 문자 수를 정수 형태로 반환합니다. 이 특성을 잘 활용하면 세미콜론 없이도 원하는 문자열을 출력할 수 있습니다.

printf 함수의 구문

int printf(constant char *format, ...)

printf 함수는 여러 개의 인자를 받을 수 있으며, 첫 번째 인자는 출력할 문자열입니다. 함수가 실행되면 문자열이 화면에 출력되고, 출력된 총 문자 수가 반환값으로 돌아옵니다.

즉, printf 호출 자체를 조건문의 조건식 안에 배치하고 빈 코드 블록을 실행하면, 세미콜론 없이도 문자열을 출력할 수 있습니다. 같은 원리로 매크로(macro)나 while 루프를 활용하는 방법도 가능합니다.

지금부터 각 방법을 하나씩 살펴보겠습니다.

1. if문을 사용한 출력

예제 코드

#include<stdio.h>
int main(){
    if (!printf("Tutorials Point"))
    { }
}

실행 결과

Tutorials Point

printf가 문자열을 출력하면서 15라는 값을 반환하고, 논리 부정 연산자(!)에 의해 조건식은 거짓(0)이 됩니다. 따라서 빈 블록만 실행되고 프로그램은 정상적으로 종료됩니다.

2. switch문을 사용한 출력

예제 코드

#include<stdio.h>
int main(){
    switch (!printf("Tutorials Point"))
    { }
}

실행 결과

Tutorials Point

switch문의 괄호 안 표현식이 평가되는 시점에 printf가 실행되므로, 마찬가지로 세미콜론 없이 문자열이 출력됩니다.

3. while 루프를 사용한 출력

예제 코드

#include<stdio.h>
int main(){
    while(!printf("Tutorials Point"))
    { }
}

실행 결과

Tutorials Point

while 루프의 조건식이 처음 평가될 때 printf가 실행되어 문자열이 출력됩니다. 이후 조건식이 거짓이 되므로 루프는 한 번만 평가되고 종료됩니다.

4. 매크로를 사용한 출력

예제 코드

#include<stdio.h>
#define printstr printf("Tutorials Point")
int main(){
    if (!printstr)
    { }
}

실행 결과

Tutorials Point

#define 전처리기 지시문으로 printf 호출을 매크로로 정의해 두면, 컴파일 시점에 매크로가 실제 코드로 치환됩니다. 이를 조건식 안에서 사용하면 앞선 방법들과 동일하게 동작합니다.

마무리

핵심은 모든 방법이 공통적으로 printf의 반환값과 조건식 평가 시점을 활용한다는 점입니다. 조건문이나 반복문의 조건식은 반드시 평가되어야 하므로, 그 안에 넣은 printf는 세미콜론 없이도 실행될 수 있습니다. 이처럼 언어의 동작 원리를 깊이 이해하면, 겉보기에 불가능해 보이는 과제도 우아하게 해결할 수 있습니다.