Привет мир в C без точек с запятой и без IF / WHILE / для операторов [закрыто]
мой друг говорит, что можно написать программу на C, которая будет печатать "hello world" без IF/WHILE/FOR
и без точки с запятой. После минимальных исследований я сказал ей, что это невозможно. Возможно ли это?
7 ответов:
Я пытался найти "портативный" способ кражи точки с запятой из файла включения. Это работает под 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 <stdio.h> int main() { switch (printf("Hello, world!\n")) {} }
Если ваш друг говорит: "о, вы тоже не можете использовать switch", то:
#include <stdio.h> int main(int argc, char *argv[printf("Hello, world!\n")]) {}
Я разрываюсь о том, чтобы предложить это, потому что это зависит от точной формулировки вопроса, но:
#error hello world
(если ничего другого, возможно, это предотвратит продолжение "как вы печатаете hello world без
main
"...)
можно написать программу на C, которая будет печатать "hello world" без IF/WHILE/FOR и без точек с запятой.
легко. Обратите внимание, что C чувствителен к регистру.
int main() { if (printf("Hello, World\n")){} }
if
ключевое слово в C,IF
нет.