Autor Tema: ¿Como indentais (sangrais) el código en C?  (Leído 3333 veces)

0 Usuarios y 1 Visitante están viendo este tema.



Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #17 en: 02 de Abril de 2020, 06:25:36 »
Es que dejas demasiado espacio y eso va contra la legibilidad.
Desde mi punto de vista de 3 a 5 espacios es el ideal.
En Python, que es un lenguaje que se toma esto muy en serio (la identación es OBLIGATORIA), la identación estandar es de 4 espacios.
Yo prefiero 3 porque así me ahorro 1, es más compacto sin perder legibilidad.

Desde mi punto de vista 2 espacios (creo que es el estándar Arduino) es demasiado poco. Las líneas están demasiado juntas y más de 5 espacios es demasiado largo.


Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #18 en: 02 de Abril de 2020, 06:48:25 »
Varias versiones de indentado. Yo me quedo con la de 3 espacios y si no tengo más remedio con la de 4 espacios.
Las demás las descarto.
Un saludo.

Código: C
  1. // Prime number with Eratostenes
  2. // 2 spaces
  3.  
  4. #include <stdio.h>
  5. #define MAX_NUMEROS  1500
  6. int main() {
  7.   int i, criba, total_primos;
  8.   int primos[MAX_NUMEROS+1];
  9.  
  10.   for (i = 0; i <= MAX_NUMEROS; i++)
  11.     primos[i] = 0;
  12.   total_primos = 0;
  13.  
  14.   for (i = 2; i <= MAX_NUMEROS; i++) {
  15.     if (primos[i] != 1 || i == 2) {
  16.       primos[i] = i;
  17.       printf("%6d is a prime number\n", i);
  18.       for (criba = 2; (criba * i) <= MAX_NUMEROS; criba++) {
  19.         primos[criba * i] = 1;
  20.       }
  21.       total_primos += 1;
  22.     }
  23.   }
  24.   printf("There are %d prime numbers\n", total_primos);
  25. }

Código: C
  1. // Prime number with Eratostenes
  2. // 3 spaces
  3.  
  4. #include <stdio.h>
  5. #define MAX_NUMEROS  1500
  6. int main() {
  7.    int i, criba, total_primos;
  8.    int primos[MAX_NUMEROS+1];
  9.  
  10.    for (i = 0; i <= MAX_NUMEROS; i++)
  11.       primos[i] = 0;
  12.    total_primos = 0;
  13.  
  14.    for (i = 2; i <= MAX_NUMEROS; i++) {
  15.       if (primos[i] != 1 || i == 2) {
  16.          primos[i] = i;
  17.          printf("%6d is a prime number\n", i);
  18.          for (criba = 2; (criba * i) <= MAX_NUMEROS; criba++) {
  19.             primos[criba * i] = 1;
  20.          }
  21.          total_primos += 1;
  22.       }
  23.    }
  24.    printf("There are %d prime numbers\n", total_primos);
  25. }

Código: C
  1. // Prime number with Eratostenes
  2. // 4 spaces
  3.  
  4. #include <stdio.h>
  5. #define MAX_NUMEROS  1500
  6. int main() {
  7.     int i, criba, total_primos;
  8.     int primos[MAX_NUMEROS+1];
  9.  
  10.     for (i = 0; i <= MAX_NUMEROS; i++)
  11.         primos[i] = 0;
  12.     total_primos = 0;
  13.  
  14.     for (i = 2; i <= MAX_NUMEROS; i++) {
  15.         if (primos[i] != 1 || i == 2) {
  16.             primos[i] = i;
  17.             printf("%6d is a prime number\n", i);
  18.             for (criba = 2; (criba * i) <= MAX_NUMEROS; criba++) {
  19.                 primos[criba * i] = 1;
  20.             }
  21.             total_primos += 1;
  22.         }
  23.     }
  24.     printf("There are %d prime numbers\n", total_primos);
  25. }

Código: C
  1. // Prime number with Eratostenes
  2. // 5 spaces
  3.  
  4. #include <stdio.h>
  5. #define MAX_NUMEROS  1500
  6. int main() {
  7.      int i, criba, total_primos;
  8.      int primos[MAX_NUMEROS+1];
  9.  
  10.      for (i = 0; i <= MAX_NUMEROS; i++)
  11.           primos[i] = 0;
  12.      total_primos = 0;
  13.  
  14.      for (i = 2; i <= MAX_NUMEROS; i++) {
  15.           if (primos[i] != 1 || i == 2) {
  16.                primos[i] = i;
  17.                printf("%6d is a prime number\n", i);
  18.                for (criba = 2; (criba * i) <= MAX_NUMEROS; criba++) {
  19.                     primos[criba * i] = 1;
  20.                }
  21.                total_primos += 1;
  22.           }
  23.      }
  24.      printf("There are %d prime numbers\n", total_primos);
  25. }

Código: C
  1. // Prime number with Eratostenes
  2. // 6 spaces
  3.  
  4. #include <stdio.h>
  5. #define MAX_NUMEROS  1500
  6. int main() {
  7.       int i, criba, total_primos;
  8.       int primos[MAX_NUMEROS+1];
  9.  
  10.       for (i = 0; i <= MAX_NUMEROS; i++)
  11.             primos[i] = 0;
  12.       total_primos = 0;
  13.  
  14.       for (i = 2; i <= MAX_NUMEROS; i++) {
  15.             if (primos[i] != 1 || i == 2) {
  16.                   primos[i] = i;
  17.                   printf("%6d is a prime number\n", i);
  18.                   for (criba = 2; (criba * i) <= MAX_NUMEROS; criba++) {
  19.                         primos[criba * i] = 1;
  20.                   }
  21.                   total_primos += 1;
  22.             }
  23.       }
  24.       printf("There are %d prime numbers\n", total_primos);
  25. }

« Última modificación: 02 de Abril de 2020, 06:54:12 por Picuino »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #19 en: 02 de Abril de 2020, 06:57:04 »
 
Que manera de sufrir (sin necesidad), si hoy en día cualquier IDE medianamente decente tiene auto indentación. Por ejemplo MCUXpresso que se basa en Eclipse permite indentar simplemente pulsando Ctrl+I para un bloque de lineas marcadas, o Ctrl+shift+F para todo el fuente.

Un buen IDE genérico con auto indentación es Visual Studio Code Insiders.

El colmo del sufrimiento es programar en ensamblador, para PIC12/16 e indentar a mano, ¿ algo más para rematar, y hacerlo más dificil todavía ?, tal vez programar directamente en binario y escribir los programas a lapiz en papel reciclado, de ese que tiene grano para que el lápiz no corra bien y te cueste más. Y nada de luz eléctrica, con velas de iglesia, de esas que ponen en los cepillos, y sillas sin repaldo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #20 en: 02 de Abril de 2020, 07:09:03 »
 :D :D :D

Eso ha estado bien.

Pero lo que discutimos es cómo dejar el indentado no cómo hacerlo. En el editor de Arduino por ejemplo se autoindenta con CTRL + T.

El tema está en cómo decirle al editor que indente (con tabs, con espacios, con cuántos espacios)

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #21 en: 02 de Abril de 2020, 07:37:57 »
En Python, un lenguaje que se toma la indentación muy en serio, se recomienda utilizar 4 espacios (sin tabulaciones):
https://www.python.org/dev/peps/pep-0008/#indentation
https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #22 en: 02 de Abril de 2020, 13:09:44 »
Pero lo que discutimos es cómo dejar el indentado no cómo hacerlo. En el editor de Arduino por ejemplo se autoindenta con CTRL + T.

El tema está en cómo decirle al editor que indente (con tabs, con espacios, con cuántos espacios)

Cuanto tiempo libre tenéis, la virgen. Lo último que se me ocurriría es urgar en el plugin del IDE para cambiar la manera en la que indenta, se supone que por defecto lo hace de la forma más estandar, la que utiliza la mayoría.

A mi hay algunas cosas que no me gustan de la configuración estandar de indentación, como cuando despliega en exceso un IF, con llaves para una sola instrucción y cosas de ese tipo. Pero aún así veo cosas mucho más prioritarias que ponerme con esos temas.

El fuente es legible y se indenta el solito, me basta. Y sobre todo, la totalidad del fuente está indentado de manera homogenea, y cualquier otro fuente que haga sobre el mismo IDE.
« Última modificación: 02 de Abril de 2020, 14:24:13 por planeta9999 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #23 en: 02 de Abril de 2020, 13:25:37 »
Suele ser fácil cambiar la configuración de la indentación. Es símplemente cambiar un número u opción en la configuración del IDE.

En cuanto a lo estándar, el caso es que no existe indentación estándar. Cada programador hace las cosas de una manera distinta y suele preferir una a las demás. En tu caso prefieres la indentación estándar del IDE y te costaría mucho cambiar de forma de hacer las cosas (como a todos).
Eso que haces también se puede hacer cuando hay un equipo de programadores y se quiere tener un formato homogeneo.

Pero una pregunta. Cuando quieres indentar una línea en tu IDE ¿a qué tecla le das, espacio o tabulación?

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #24 en: 02 de Abril de 2020, 13:31:20 »
Yo en Arduino cambio la configuración de 2 espacios por tab a 3 espacios.

Archivo... Preferencias... Editar archivo preferences.txt
editor.tabs.size=3

Reinicio y listo.


En MPLABX
Tools... Options... Editor... Formatting...
[ x ] Expand Tabs to Spaces                  (Aunque nunca utilizo tabs, por si acaso)
Number of Spaces per Indent = 3
Tab Size = 3
Right Margin = 80   (Me gusta lo clásico)

Un saludo.
« Última modificación: 02 de Abril de 2020, 13:57:46 por Picuino, Razón: Añado expand tabs to spaces »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #25 en: 02 de Abril de 2020, 14:36:21 »
Pero una pregunta. Cuando quieres indentar una línea en tu IDE ¿a qué tecla le das, espacio o tabulación?

No suelo usar los tabuladores, pero da igual, si al final le voy a picar a Ctrl+I  o Ctrl+Shift+F y el IDE lo va a ordenar todo para que quede bonito. Lo único que me importa es que todo esté indentado de manera uniforme para que sea legible.

Lo que aún no he averiguado como arreglar es cuando le doy a copiar/pegar. No se porque no pega el bloque de código a principio de linea, siempre mete como un sangrado por la izquierda y me lo deja todo desplazado hacia la derecha, como si metiera una tabulación al principio de cada linea.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Como indentais (sangrais) el código en C?
« Respuesta #26 en: 02 de Abril de 2020, 14:48:13 »
Si es una empresa te van a bajar la linea que ellos quieren, o tabs, o 2 espacios, o 3, o 4. El definir que si lo haces con espacios o tabs es lo que influye en el salario o la experiencia es tambien algo sin sentido. Ya que usualmente son politicas de las empresas.

Yo entiendo perfectamente lo que dice planeta, la identación automática es algo que esta en todos los IDEs, y en la mayoría te dibujan lineas donde va la identacion que  es IGUAL a un TAB.

Por que presionar 3 o 4 veces una misma tecla, cuando solo podes presionar 1 sola y listo. Si que después te lo transforme a lo que quiera (espacios,etc) Pero no hay ningún sentido de presionar varias veces la tecla, cuando podes presionarla solo una vez. Ademas lo muy molesto que es cuando vos queres quitar una linea de identacion que con un simple retroceso podes borrarlo, y si te lo cambia a 3 o 4 espacios, necesitas presionar 4 veces para borrarlo.
El usar TABs me da comodidad, buena vista, y compatibilidad (ya que el mismo IDE los deberia transformar a los espacios de TU GUSTO).

El codigo va a estar guardado con TABS, luego cuando se abre con los IDEs, va a depender del gusto del programador:
Te gusta mas separado, lo configuras a 4 espacios,
Te gusta mas compacto, lo configuras a 2,

El TAB se transforma en como vos tengas configurado tu IDE. Mejor solución imposible!
El archivo ocupa menos, se que es poco el tamaño pero considerar que un TAB es solo 1 caracter y 4 espacios son 4 caracteres.

Vuelvo a decir, no pasa por cuestión de gustos, acá lo mas eficiente Y adaptable a cualquier programador es un TAB. En un mundo donde el software y toda la electronica/informatica es realizado para mejorar y facilitar los trabajos, elegimos querer trabajar mas presionado espacios.

Si, tenes editores VIEJOS que solo accedes por SSH, que no poseen una UI, etc, etc, que solo requeririan un pequeño cambio para agregar una configuracion que transforme los TABs en X
 espacios y listo. Problema solucionado. Se que puede ser posible, pero no creo que sea ideal estar modificando en produccion el codigo, sin antes ser probado en local. En fin... Sigo con mis TABs.