Подтвердить что ты не робот

Hello world в C без точек с запятой и без операторов IF/WHILE/FOR

Мой друг говорит, что можно написать программу на C, которая будет печатать "hello world" без IF/WHILE/FOR и без точек с запятой. После минимальных исследований я сказал ей, что это невозможно. Возможно ли это?

4b9b3361

Ответ 1

Я пытаюсь найти "переносимый" способ кражи точки с запятой из файла include. Это работает под Linux:

int main(int ac, char **av)
{
#define typedef
#define uint8_t a[printf("hello world\n")]
#include <stdint.h>
}

Это приводит к тому, что один typedef unsigned char uint8_t станет моим printf.

Другим трюком, который работал, был #define отбросить каждый стандартный тип stdint таким образом, чтобы stdint.h сводился к набору точек с запятой.

Оба из них падают на FreeBSD, потому что он использует частные промежуточные типы (например, __uint8_t), что означает, что удаление typedef не выполняется в приведенном примере и не позволяет мне успешно удалить все несезонные точки в другом случае.

Кажется, что можно было бы украсть точку с запятой чисто из файла include. Может ли кто-нибудь улучшить мою попытку?

Ответ 2

#include <stdio.h>

int main() {
    switch (printf("Hello, world!\n")) {}
}

Если ваш друг говорит "о, вы не можете использовать переключатель", тогда:

#include <stdio.h>

int main(int argc, char *argv[printf("Hello, world!\n")]) {}

Ответ 3

Я разорван о том, предлагать это, потому что он зависит от точной формулировки вопроса, но:

#error hello world

(если ничего другого, возможно, это не остановится после "как вы печатаете мир привет без main"...)

Ответ 4

возможно написать программу на C, которая будет печатать "hello world" без IF/WHILE/FOR и без точек с запятой.

Легко. Обратите внимание, что C чувствителен к регистру.

int main()
{
    if (printf("Hello, World\n")){}
}

if является ключевым словом в C, if не является.

Ответ 5

Вы также можете обойти ограничение, например

#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch

Ответ 6

Как насчет:

#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}

не C cool:)

Ответ 7

вы можете использовать оператор switch, чтобы получить свой вывод желания, вот код ниже

#include<stdio.h>

int main()
{
  switch(printf("hello world"))

return 0;
}

надеюсь, что это поможет вам