TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: remi04 en 31 de Marzo de 2020, 11:52:27

Título: ¿Como indentais (sangrais) el código en C?
Publicado por: remi04 en 31 de Marzo de 2020, 11:52:27
Sabiendo que en lenguajes como Python o ensamblador, el indentado es obligatorio, en C C++,JAVA etc se puede hacer como uno quiera o le resulte mas cómodo. Habiendo técnica de buenas prácticas como en C++ o JAVA, preguntaba si en C puro soleis respetar las mismas prácticas.

  En mi caso por ejemplo, al tener un monitor grande que es de 32" 4K, me resulta mas cómodo extenderme colocando por ejemplo las instrucciones de un if al final de la linea if y una sola instruccion por linea. Así el codigo me queda como en la imagen adjunta.

  No he podido poner el ejemplo utilizando el XML (Codigo = c) por que a pesar de ponerlo igual que en la imágen, luego al publicar el mensaje sale como le da la gana, por eso adjunto imagen de como me queda en mplab por ejemplo.

    ¿Como lo soléis hacer ustedes?, ¿atendiendo al modo clásico como Java por ejemplo 2 espacios después de la llave de cierre?

 ¿ Existe un modo correcto en C?, modo en el que todos los códigos deberían ser indentados??.

  - Tienes que ingresar para ver archivos adjuntos -  
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Omar86 en 31 de Marzo de 2020, 17:28:28
Cuidado con esa pregunta. Es como opinar de derbis en el fútbol. 

Mejor inserta el código, para quien se anime, lo tenga más fácil. Con la imagen tendrían que escribirlo todo de nuevo y/o emplear mucho tiempo para contestar claramente.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 31 de Marzo de 2020, 17:43:01
Siempre tres espacios.
Los tabuladores no los puedo ver.
Es cuestión de gustos.

En tu caso colocas un espacio excesivo. Los que no tengan tu monitor no lo pueden ver bien.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 31 de Marzo de 2020, 17:45:49
Como norma las líneas no deberían tener más de 80 columnas (versión clásica) o 130 columnas (versión moderna con buenos monitores)
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: KILLERJC en 31 de Marzo de 2020, 18:55:35
Yo uso tabuladores... Hoy en dia los compiladores puede mostrar los Tabs y hacer Tabs como espacios... Adaptable a cada gusto (al que hace 2 espacios, al que hace 3, etc ), ademas es mas simple presionar 1 tecla y no 3.

No veo razónes de usar espacios. Y la compatibilidad es una mentira, debido a lo que nombre antes, a no ser que exista una orden central para todos los programadores de que se usan si o si espacios. Lo mas compatible y comodo para todos ES y va a ser el Tab.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: remi04 en 31 de Marzo de 2020, 19:28:54
Cuidado con esa pregunta. Es como opinar de derbis en el fútbol. 

Mejor inserta el código, para quien se anime, lo tenga más fácil. Con la imagen tendrían que escribirlo todo de nuevo y/o emplear mucho tiempo para contestar claramente.

 Insertando el código como ya he dicho, al tratar de poner el código igual que en la imagen luego cuando publico el mensaje sale como le da la gana. Te lo separa mucho más o mucho menos de modo que no vale para ilustrar lo que pretendía ilustrar..  Por eso puse la imagen para que se vea como es el indentado que en mi caso le doy.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: KILLERJC en 31 de Marzo de 2020, 23:37:52
Insertando el código como ya he dicho, al tratar de poner el código igual que en la imagen luego cuando publico el mensaje sale como le da la gana. Te lo separa mucho más o mucho menos de modo que no vale para ilustrar lo que pretendía ilustrar..  Por eso puse la imagen para que se vea como es el indentado que en mi caso le doy.

Si usas el tag de Code, generalmente respeta la identacion, no asi si lo pones sin el tag o en quote
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: AccioRw en 01 de Abril de 2020, 04:24:13
Si consigues insertar el código te lo dejo identado como suelo hacer habitualmente y mucha gente que me rodea lo hace (por que yo aprendí de ellos :oops:)
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: remi04 en 01 de Abril de 2020, 06:16:44
Insertando el código como ya he dicho, al tratar de poner el código igual que en la imagen luego cuando publico el mensaje sale como le da la gana. Te lo separa mucho más o mucho menos de modo que no vale para ilustrar lo que pretendía ilustrar..  Por eso puse la imagen para que se vea como es el indentado que en mi caso le doy.

Si usas el tag de Code, generalmente respeta la identacion, no asi si lo pones sin el tag o en quote

 Vamos a ver con un ejemplo práctico:

  Fijate en esta captura de pantalla como he escrito el código:
  - Tienes que ingresar para ver archivos adjuntos -  

 Y sin embargo, con el tag mira como se publica. Nada que ver. Por eso lo incrusté como imágen, por que el tag degrada los espacios y las tabulaciones y te lo deja como le parece por lo que no me servia para ilustrar lo que pretendía.
Código: C
  1. void main() {
  2.   int a = 0;
  3.   while(a <= 255) {
  4.                              if (a == 20) {
  5.                                                 printf("He llegado a 20);
  6.                                                return;
  7.                                               }
  8.  
  9.                             else if (a == 20) {
  10.                                                       printf("He llegado a 20);
  11.                                                        return;
  12.                                                       }
  13.                             delay_ms(1000);
  14.                             a++;                          
  15.                           }
  16. }
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: AccioRw en 01 de Abril de 2020, 07:07:14
Así lo haría yo, comentarios de secciones grandes asi:
/*
 * Main
 */

y comentarios sencillos:
// returned real value
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 01 de Abril de 2020, 07:29:38
Yo uso tabuladores... Hoy en dia los compiladores puede mostrar los Tabs y hacer Tabs como espacios... Adaptable a cada gusto (al que hace 2 espacios, al que hace 3, etc ), ademas es mas simple presionar 1 tecla y no 3.

No veo razónes de usar espacios. Y la compatibilidad es una mentira, debido a lo que nombre antes, a no ser que exista una orden central para todos los programadores de que se usan si o si espacios. Lo mas compatible y comodo para todos ES y va a ser el Tab.

 :D :D :D :D

Hay un capítulo de la serie Silicon Valley dedicado a eso. Es como escoger equipo de futbol, cada uno tiene su preferencia y no cambiaría por nada del mundo.


Yo no puedo ver los tabs ni en pintura, no los soporto y nunca utilizo el tab aunque el editor de texto inserte espacios. Pero imagino que a otros les pasa justo lo contrario con los espacios.
Es una cuestión de preferencias, pero los programadores suelen estar muy polarizados con preferencias muy fuertes.

Un saludo.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 01 de Abril de 2020, 08:27:26
Mi versión:

Código: C
  1. void main() {
  2.    int a = 0;
  3.    while (a <= 255) {
  4.       if (a == 20)  {
  5.          printf("He llegado a 20");
  6.          return;
  7.       }
  8.       else if (a == 40) {
  9.          printf("He llegado a 40");
  10.          return;
  11.       }
  12.       __delay_ms(100);
  13.       a++;
  14.    }
  15. }
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Leon Pic en 01 de Abril de 2020, 17:12:38
Yo uso tab en todos los lenguajes.
AL quedar más prolijo (para mi), lo puedo leer mejor; y entender las anidaciones que hay.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: AccioRw en 01 de Abril de 2020, 17:54:00
El problema de los tabuladores es que muchas veces no ponen 4 espacios y a veces da problema al sacar el código de donde lo estés poniendo hacia otro IDE/editor de texto
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 01 de Abril de 2020, 18:24:50
Acabo de recordar que los ficheros makefile solo funcionan indentando con tabulaciones. En ese caso uso tabs... obligado  :D
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino en 01 de Abril de 2020, 18:37:16
https://keepcoding.io/es/blog/tabulaciones-vs-espacios-salario-de-un-programador/

https://medium.com/@josedlujan/qu%C3%A9-es-mejor-tabs-o-espacios-b8f1caeda76d
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: remi04 en 01 de Abril de 2020, 19:07:57
https://keepcoding.io/es/blog/tabulaciones-vs-espacios-salario-de-un-programador/

https://medium.com/@josedlujan/qu%C3%A9-es-mejor-tabs-o-espacios-b8f1caeda76d

 Según estos artículos, con mi indentado, me meterían fuego con leña vede  :lol: :5]
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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.

Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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. }

Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: planeta9999 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.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: planeta9999 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.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: Picuino 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.
Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: planeta9999 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.

Título: Re:¿Como indentais (sangrais) el código en C?
Publicado por: KILLERJC 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.