hola mundo en C sin punto y coma y sin declaraciones IF/WHILE/FOR [closed]

4 minutos de lectura

hola mundo en C sin punto y coma y sin
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?

  • 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

1647579189 58 hola mundo en C sin punto y coma y sin
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

  • @soy: gorra de representante.

    – kennytm

    10 de noviembre de 2010 a las 19:50


  • +1, aunque se te olvidó un * antes de argv. ¿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 🙂

hola mundo en C sin punto y coma y sin
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á

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad