Mon ami dit qu'il est possible d'écrire un programme C qui imprimera "bonjour le monde" sans IF/WHILE/FOR
et sans point-virgule. Après des recherches minimales, je lui ai dit que ce n'était pas possible. C'est possible?
J'ai essayé de trouver un moyen "portable" de voler un point-virgule d'un fichier include. Cela fonctionne sous Linux:
int main(int ac, char **av)
{
#define typedef
#define uint8_t a[printf("hello world\n")]
#include <stdint.h>
}
Cela provoque l'un typedef unsigned char uint8_t
pour devenir mon printf.
Une autre astuce qui a fonctionné était de #define
loin tous les types stdint standard tels que stdint.h
se réduit à un tas de points-virgules.
Les deux tombent à plat sur FreeBSD car il utilise des types intermédiaires privés (comme __uint8_t
), ce qui signifie que la suppression de typedef échoue dans l'exemple cité et m'empêche de supprimer avec succès tous les non-points-virgules dans l'autre cas.
Il semble qu'il devrait être possible de voler proprement un point-virgule dans un fichier inclus. Quelqu'un peut-il améliorer ma tentative?
#include <stdio.h>
int main() {
switch (printf("Hello, world!\n")) {}
}
Si votre ami dit "oh, vous ne pouvez pas non plus utiliser le commutateur", alors:
#include <stdio.h>
int main(int argc, char *argv[printf("Hello, world!\n")]) {}
Je suis déchiré sur l'opportunité de suggérer cela, car cela dépend du libellé exact de la question, mais:
#error hello world
(si rien d'autre, peut-être cela évitera-t-il un suivi "comment imprimer hello world sans main
" ...)
il est possible d'écrire un programme C qui imprimera "hello world" sans IF/WHILE/FOR et sans point-virgule.
Facile. Notez que C est sensible à la casse.
int main()
{
if (printf("Hello, World\n")){}
}
if
est un mot clé en C, IF
ne l'est pas.
Vous pouvez également contourner la limitation comme
#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
Qu'en est-il de:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}
n'est pas cool :)
vous pouvez utiliser l'instruction switch pour obtenir la sortie désirée, voici le code ci-dessous
#include<stdio.h>
int main()
{
switch(printf("hello world"))
return 0;
}
j'espère que ceci vous aidera