이쁜왕자 만쉐~~
세미콜론(;) 없는 hello world 본문
"Hello World without Semicolon" 이라고, hello world 를 출력하는 C 프로그램을 작성하는데, 세미콜론(;) 을 사용하지 말고 작성하라는 문제가 있습니다.
일단 C 표준을 완전히 따르면서, 컴파일 워닝조차 없는 답은 아직 없는 것 같습니다.
일단 C 표준에서는 int main() 을 사용하도록 되어 있기 때문에, 반드시 return 0; 가 필요하고, 여기에서 세미콜론이 사용됩니다. 다만, return 을 생략하더라도 컴파일러가 이정도는 워닝만 출력하고 알아서 처리해주기 떄문에, 약간의 융통성을 발휘할 수 있습니다. 아니면 표준을 어기고 void main() 을 쓰는 방법도 있습니다. 어느 것을 선택하든 워닝은 발생합니다.
문제의 핵심은 printf("hello world\n"); 을 어떻게 하면 세미콜론 없게 바꿀 수 있냐는 것이겠죠.
검색해 보면, if, while, switch 의 세가지 답이 나옵니다.
#include <stdio.h> int main() { // using if if (printf("hello world\n")) { } // using while while (!printf("hello world\n")) { } // using switch switch (printf("hello world\n")) { } } |
이 세가지 모두 세미콜론 없이 하나의 문장이 수행됩니다.
참고로 while 의 경우 1번만 수행하게 하기 위해서 ! (=not) 이 필요합니다.
printf 를 puts 같은 함수로 바꾸는 변형이 존재하지만, 문제의 핵심은 아닙니다.
.....................
if, while, switch 는 너무 유명하기 때문에, 이것들을 사용하지 않는 방법이 있는가? 라는 파생 문제도 존재합니다.
조금 어려운 방법으로 아래와 같은 답이 존재합니다.
#include <stdio.h> int main (int argc, char *argv[printf("hello world\n")]) { } |
사실 main 함수의 파라미터를 임의로 넣어도 컴파일은 되기 때문에 이런 식으로 변형도 가능합니다.
#include <stdio.h> int main (int a[printf("hello world\n")]) { } |