alex gordon
Mi amigo dice que es posible escribir un programa en C que imprima “hola mundo” 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?
cdhowie
#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")]) {}
-
main() no tiene retorno 😉
– girando
10 de noviembre de 2010 a las 18:49
-
@ tur1ng: No necesita uno.
– cdhowie
10 de noviembre de 2010 a las 18:49
-
-
+1, aunque se te olvidó un
*
antes deargv
. ¿Por qué funciona esto?– Fred Foo
10 de noviembre de 2010 a las 20:22
-
Es por eso que no me gusta C (o C ++ para el caso). ¿Cómo diablos es eso legal? :-S
– Alejandro
14 de noviembre de 2010 a las 5:01
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 uno typedef unsigned char uint8_t
para convertirse en mi printf.
Otro truco que funcionó fue #define
lejos cada tipo estándar de stdint tal que stdint.h
se reduce a un montón de puntos y comas.
Ambos 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 con éxito todos los que no sean punto y coma 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?
-
+1 por un enfoque muy singular… Me gusta.
– cdhowie
11 de noviembre de 2010 a las 3:48
-
No funciona en Windows (compilador de Microsoft C ver. 17)
– Zheka Kozlov
14 de enero de 2015 a las 12:53
-
#include
contiene muchos puntos y comas – Iván Ivánovich
14 de enero de 2015 a las 12:54
-
¡@orionll trabaja en Winodws! Pero con MinGW 4.4 😛
– ANI
15 de enero de 2015 a las 10:02
No sé si sugerir esto porque depende de la redacción exacta de la pregunta, pero:
#error hello world
(al menos, tal vez evitará un seguimiento “¿cómo se imprime hola mundo sin main
“…)
-
por favor no seas tan duro contigo mismo
– Alex Gordon
10 de noviembre de 2010 a las 19:08
-
El problema principal con esta técnica es que en realidad no produce un programa ejecutable. Sin embargo, es ciertamente inteligente. Y una solución inteligente nunca es una mala solución.
– cdhowie
10 de noviembre de 2010 a las 19:11
-
@cdh pero quieres decir “sigo siendo rey”
– Alex Gordon
10 de noviembre de 2010 a las 19:15
-
Jaja, no. También voté este. 🙂
– cdhowie
10 de noviembre de 2010 a las 20:26
-
No funciona en todas las plataformas, pero…
#pragma message("Hello World!")
Además, creará un programa ejecutable. Simplemente el programa no hará nada :).– yash101
28/07/2016 a las 20:05
es posible escribir un programa en C que imprima “hola mundo” sin IF/WHILE/FOR y sin punto y coma.
Fácil. Tenga en cuenta que C distingue entre mayúsculas y minúsculas.
int main()
{
if (printf("Hello, World\n")){}
}
if
es una palabra clave en C, IF
no es.
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
Qué pasa:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}
no es genial 🙂
Zishan
puede usar la declaración de cambio para obtener el 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á
Relacionado: stackoverflow.com/questions/2754493/…
– kennytm
10 de noviembre de 2010 a las 18:40
¿Por qué querrías? Si a su teclado le falta un punto y coma, tiene problemas más profundos.
– John Smith
10 de noviembre de 2010 a las 18:41
¿Parece que tu amigo se deleita en esas competencias ofuscadas de C y PERL?
– winwaed
10 de noviembre de 2010 a las 18:48
@John: Por la misma razón, la gente escribe entradas para el concurso C ofuscado, o escribe poesía en Perl, o hace Sudoku.
– cdhowie
10 de noviembre de 2010 a las 18:48
Si le falta una llave, puede
cat
algún archivo C aleatorio y cortar y pegar el;
.– Ben Jackson
10 de noviembre de 2010 a las 18:48