Привет мир в C без точек с запятой и без IF / WHILE / для операторов [закрыто]


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

7 61

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 нет.

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

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

о:

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

не с круто :)

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

#include<stdio.h>

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

return 0;
}

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