Мой друг говорит, что можно написать программу на C, которая будет печатать "hello world" без IF/WHILE/FOR
и без точек с запятой. После минимальных исследований я сказал ей, что это невозможно. Возможно ли это?
Hello world в C без точек с запятой и без операторов IF/WHILE/FOR
Ответ 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;
}
надеюсь, что это поможет вам