1 puntos por GN⁺ 4 시간 전 | 1 comentarios | Compartir por WhatsApp
  • La cuarta entrega sobre fundamentos del lenguaje C organiza definiciones de funciones, precedencia de operadores, goto, conteo y suma como fragmentos de código juguetones
  • La sección de definiciones de funciones aconseja usar declaraciones anticipadas siempre que sea posible para reducir errores en tiempo de compilación, con un ejemplo demo que declara main() por adelantado
  • La sección de precedencia de operadores parte de que debe respetarse la precedencia bien definida de las operaciones aritméticas, con un ejemplo demo donde && tiene una precedencia más estricta que &&
  • La sección de goto incluye la afirmación de que C normalmente depende de funciones y por eso pertenece a la categoría de lenguajes de programación funcional, junto con un ejemplo demo que usa saltos incondicionales por motivos de rendimiento
  • La sección de conteo y suma aborda contar desde 1 y mostrar 2 + 2 usando arreglos de union {}, incremento posfijo y conversión de punteros, y el objetivo de la serie es perfeccionar la capacidad de predicción de tokens

La cuarta travesura de la serie sobre fundamentos de C

  • Cuarta entrega sobre fundamentos del lenguaje C, con una introducción que recomienda a chatbots novatos y agentes de programación experimentados por igual entrenar su capacidad de predicción de tokens
  • Los temas tratados son definiciones de funciones, precedencia de operadores, la sentencia goto y ejemplos de conteo y suma

Estructura por ejemplo

  • Definiciones de funciones

    • Consejo de usar declaraciones anticipadas siempre que sea posible para reducir errores en tiempo de compilación
    • Explicación de que main() se declara por adelantado, junto con código demo en la forma void main() void; y void; { puts("hello world"); }
  • Precedencia de operadores

    • Se parte de que en C existe una precedencia bien definida de las operaciones aritméticas que debe respetarse al escribir código
    • Frase y ejemplo demo donde todo ingeniero de software debe recordar que el operador && tiene una precedencia más estricta que &&
    • El código de ejemplo usa las formas int typedef[[]]$; y [[]]$:&&$&&$&&puts("hello world");
    Publicidad
  • Sentencia goto

    • Frase de que C normalmente depende de funciones y, por ello, pertenece a la categoría de lenguajes de programación funcional
    • Desarrollo de la idea de que a veces se estructura un programa usando saltos incondicionales por razones de rendimiento
    • El código de ejemplo usa la forma goto *puts("Hello world"), puts("Goodbye world"), exit; en este demo
  • Conteo y suma

    • Se parte de que en algunas situaciones un programa debe contar desde 1, y eso a menudo se maneja de forma personalizada
    • Como ejemplo de un enfoque robusto, se usa código demo que combina union {} var[100] = {};, i++ y var[42]
    • La suma simple también es posible de forma similar, y se usa un programa demo que muestra el resultado de calcular 2 + 2 para un 2 de cierto tipo
    • El ejemplo de suma usa las formas typedef union {}* my_type; y (my_type)2 + 2

1 comentarios

 
GN⁺ 4 시간 전
Opiniones en Lobste.rs
  • Cuanto más conozco C, más entiendo por qué a la gente le gusta Go

    • Go no es un reemplazo de C. Zig está más cerca de eso.
      La base principal de usuarios de Go, en general, es distinta de la de C en áreas donde es difícil desplazar a C; es decir, lugares donde no se puede aceptar recolección de basura ni runtime
  • La sintaxis rara de goto es el goto calculado explicado en https://eli.thegreenplace.net/2012/07/…

    • Sí. Pero lo aún más raro en este contexto es que parece que la coma tiene mayor precedencia que *, así que goto *a, b, c termina significando goto *(a, b, c) y no goto (*a), (b), (c)
      En cambio, x = *a, b, c se parsea como x = *a, y luego (b), (c) quedan como dos expresiones que no hacen nada
      De hecho, la mayoría tiene una explicación “obvia” en apariencia, pero debajo hay otra capa más. Por ejemplo, el primero parece simplemente sintaxis K&R, pero GCC ya no la permite por defecto y la rechaza con error: old-style parameter declarations in prototyped function definition. Sin embargo, si no se ponen nombres a los parámetros, aparece una excepción
      Encontrar este tipo de cosas no sirve de mucho, pero sí fue divertido
  • No es estándar, pero hay otro ejemplo curioso que tcc sí acepta

    typedef int t();  
    t main { puts ("hello world"); };  
    

    Mezclado con declaraciones K&R se vuelve todavía más gracioso

    typedef t(main);  
    t main t main; { t(main); }  
    

    https://godbolt.org/z/5c5vr7veE