resueltos - sentencia if en c++
hola mundo en C sin punto y coma y sin instrucciones IF/WHILE/FOR (7)
Mi amigo dice que es posible escribir un programa C que imprima "hello world" sin IF/WHILE/FOR
y sin punto y coma. Después de una investigación mínima, le dije que no era posible. ¿Es posible?
es posible escribir un programa en C que imprima "hello world" sin IF / WHILE / FOR y sin punto y coma.
Fácil. Tenga en cuenta que C es sensible a mayúsculas.
int main()
{
if (printf("Hello, World/n")){}
}
if
es una palabra clave en C, IF
no lo es.
He estado tratando de encontrar una forma "portátil" de robar un punto y coma de un archivo de inclusión. Esto funciona bajo Linux:
int main(int ac, char **av)
{
#define typedef
#define uint8_t a[printf("hello world/n")]
#include <stdint.h>
}
Esto hace que el typedef unsigned char uint8_t
convierta en mi printf.
Otro truco que funcionó fue #define
cada tipo de stdint estándar, de modo que stdint.h
reduce a un montón de puntos y comas.
Ambas fallan en FreeBSD porque usa tipos intermedios privados (como __uint8_t
), lo que significa que la eliminación de typedef falla en el ejemplo citado y me impide eliminar todos los puntos y comas que no sean en el otro caso.
Parece que debería ser posible robar un punto y coma limpiamente de un archivo de inclusión. ¿Alguien puede mejorar mi intento?
Me da miedo sugerir esto porque depende de la redacción exacta de la pregunta, pero:
#error hello world
(si nada más, tal vez evitará un seguimiento "¿cómo se imprime el mundo hola sin main
" ...)
Qué pasa:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!/n")]) {}
no es C genial :)
También podría solucionar la limitación como
#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
puede usar la declaración de cambio para obtener su resultado deseado, aquí está el código a continuación
#include<stdio.h>
int main()
{
switch(printf("hello world"))
return 0;
}
Espero que esto te ayudará
#include <stdio.h>
int main() {
switch (printf("Hello, world!/n")) {}
}
Si tu amigo dice "oh, tampoco puedes usar el interruptor", entonces:
#include <stdio.h>
int main(int argc, char *argv[printf("Hello, world!/n")]) {}