Merge tag '6.9-rc5-cifs-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6
[sfrench/cifs-2.6.git] / Documentation / translations / sp_SP / process / coding-style.rst
1 .. include:: ../disclaimer-sp.rst
2
3 :Original: :ref:`Documentation/process/coding-style.rst <submittingpatches>`
4 :Translator: Carlos Bilbao <carlos.bilbao@amd.com>
5
6 .. _sp_codingstyle:
7
8 Estilo en el código del kernel Linux
9 =====================================
10
11 Este es un breve documento que describe el estilo preferido en el código
12 del kernel Linux. El estilo de código es muy personal y no **forzaré** mi
13 puntos de vista sobre nadie, pero esto vale para todo lo que tengo que
14 mantener, y preferiría que para la mayoría de otras cosas también. Por
15 favor, por lo menos considere los argumentos expuestos aquí.
16
17 En primer lugar, sugeriría imprimir una copia de los estándares de código
18 GNU, y NO leerlo. Quémelos, es un gran gesto simbólico.
19
20 De todos modos, aquí va:
21
22
23 1) Sangría
24 -----------
25
26 Las tabulaciones tienen 8 caracteres y, por lo tanto, las sangrías también
27 tienen 8 caracteres. Hay movimientos heréticos que intentan hacer sangría
28 de 4 (¡o incluso 2!) caracteres de longitud, y eso es similar a tratar de
29 definir el valor de PI como 3.
30
31 Justificación: La idea detrás de la sangría es definir claramente dónde
32 comienza y termina un bloque de control. Especialmente, cuando ha estado
33 buscando en su pantalla durante 20 horas seguidas, le resultará mucho más
34 fácil ver cómo funciona la sangría si tiene sangrías grandes.
35
36 Bueno, algunas personas dirán que tener sangrías de 8 caracteres hace que
37 el código se mueva demasiado a la derecha y dificulta la lectura en una
38 pantalla de terminal de 80 caracteres. La respuesta a eso es que si
39 necesita más de 3 niveles de sangría, está en apuros de todos modos y
40 debería arreglar su programa.
41
42 En resumen, las sangrías de 8 caracteres facilitan la lectura y tienen la
43 ventaja añadida de advertirle cuando está anidando sus funciones demasiado
44 profundo. Preste atención a esa advertencia.
45
46 La forma preferida de facilitar múltiples niveles de sangría en una
47 declaración de switch es para alinear el ``switch`` y sus etiquetas
48 ``case`` subordinadas en la misma columna, en lugar de hacer ``doble
49 sangría`` (``double-indenting``) en etiquetas ``case``. Por ejemplo:
50
51 .. code-block:: c
52
53         switch (suffix) {
54         case 'G':
55         case 'g':
56                 mem <<= 30;
57                 break;
58         case 'M':
59         case 'm':
60                 mem <<= 20;
61                 break;
62         case 'K':
63         case 'k':
64                 mem <<= 10;
65                 fallthrough;
66         default:
67                 break;
68         }
69
70 No ponga varias declaraciones en una sola línea a menos que tenga algo que
71 ocultar:
72
73 .. code-block:: c
74
75         if (condición) haz_esto;
76           haz_otra_cosa;
77
78 No use comas para evitar el uso de llaves:
79
80 .. code-block:: c
81
82         if (condición)
83                 haz_esto(), haz_eso();
84
85 Siempre use llaves para múltiples declaraciones:
86
87 .. code-block:: c
88
89         if (condición) {
90                 haz_esto();
91                 haz_eso();
92         }
93
94 Tampoco ponga varias asignaciones en una sola línea. El estilo de código
95 del kernel es súper simple. Evite las expresiones engañosas.
96
97
98 Aparte de los comentarios, la documentación y excepto en Kconfig, los
99 espacios nunca se utilizan para la sangría, y el ejemplo anterior se rompe
100 deliberadamente.
101
102 Consiga un editor decente y no deje espacios en blanco al final de las
103 líneas.
104
105 2) Rompiendo líneas y strings largos
106 ------------------------------------
107
108 El estilo de código tiene todo que ver con la legibilidad y la
109 mantenibilidad usando herramientas disponibles comúnmente.
110
111 El límite preferido en la longitud de una sola línea es de 80 columnas.
112
113 Las declaraciones de más de 80 columnas deben dividirse en partes, a menos
114 que exceder las 80 columnas aumente significativamente la legibilidad y no
115 oculte información.
116
117 Los descendientes siempre son sustancialmente más cortos que el padre y
118 se colocan sustancialmente a la derecha. Un estilo muy usado es alinear
119 descendientes a un paréntesis de función abierto.
120
121 Estas mismas reglas se aplican a los encabezados de funciones con una larga
122 lista de argumentos.
123
124 Sin embargo, nunca rompa los strings visibles para el usuario, como los
125 mensajes printk, porque eso rompe la capacidad de grep a estos.
126
127
128 3) Colocación de llaves y espacios
129 ----------------------------------
130
131 El otro problema que siempre surge en el estilo C es la colocación de
132 llaves. A diferencia del tamaño de la sangría, existen pocas razones
133 técnicas para elegir una estrategia de ubicación sobre la otra, pero la
134 forma preferida, como mostraron los profetas Kernighan y Ritchie, es poner
135 la llave de apertura en la línea, y colocar la llave de cierre primero,
136 así:
137
138 .. code-block:: c
139
140         if (x es verdad) {
141                 hacemos y
142         }
143
144 Esto se aplica a todos los bloques de declaraciones que no son funciones
145 (if, switch, for, while, do). Por ejemplo:
146
147 .. code-block:: c
148
149         switch (action) {
150         case KOBJ_ADD:
151                 return "add";
152         case KOBJ_REMOVE:
153                 return "remove";
154         case KOBJ_CHANGE:
155                 return "change";
156         default:
157                 return NULL;
158         }
159
160 Sin embargo, hay un caso especial, a saber, las funciones: tienen la llave
161 de apertura al comienzo de la siguiente línea, así:
162
163 .. code-block:: c
164
165         int funcion(int x)
166         {
167                 cuerpo de la función
168         }
169
170 Gente hereje de todo el mundo ha afirmado que esta inconsistencia es...
171 bueno... inconsistente, pero todas las personas sensatas saben que
172 (a) K&R tienen **razón** y (b) K&R tienen razón. Además, las funciones son
173 especiales de todos modos (no puede anidarlas en C).
174
175 Tenga en cuenta que la llave de cierre está vacía en su línea propia,
176 **excepto** en los casos en que es seguida por una continuación de la misma
177 declaración, es decir, un ``while`` en una sentencia do o un ``else`` en
178 una sentencia if, como en:
179
180 .. code-block:: c
181
182         do {
183                 cuerpo del bucle do
184         } while (condition);
185
186 y
187
188 .. code-block:: c
189
190         if (x == y) {
191                 ..
192         } else if (x > y) {
193                 ...
194         } else {
195                 ....
196         }
197
198 Justificación: K&R.
199
200 Además, tenga en cuenta que esta colocación de llaves también minimiza el
201 número de líneas vacías (o casi vacías), sin pérdida de legibilidad. Así,
202 como el suministro de nuevas líneas en su pantalla no es un recurso
203 renovable (piense en pantallas de terminal de 25 líneas), tienes más líneas
204 vacías para poner comentarios.
205
206 No use llaves innecesariamente donde una sola declaración sea suficiente.
207
208 .. code-block:: c
209
210         if (condition)
211                 accion();
212
213 y
214
215 .. code-block:: none
216
217         if (condición)
218                 haz_esto();
219         else
220                 haz_eso();
221
222 Esto no aplica si solo una rama de una declaración condicional es una sola
223 declaración; en este último caso utilice llaves en ambas ramas:
224
225 .. code-block:: c
226
227         if (condición) {
228                 haz_esto();
229                 haz_eso();
230         } else {
231                 en_otro_caso();
232         }
233
234 Además, use llaves cuando un bucle contenga más de una declaración simple:
235
236 .. code-block:: c
237
238         while (condición) {
239                 if (test)
240                         haz_eso();
241         }
242
243 3.1) Espacios
244 *************
245
246 El estilo del kernel Linux para el uso de espacios depende (principalmente)
247 del uso de función versus uso de palabra clave. Utilice un espacio después
248 de (la mayoría de) las palabras clave. Las excepciones notables son sizeof,
249 typeof, alignof y __attribute__, que parecen algo así como funciones (y
250 generalmente se usan con paréntesis en Linux, aunque no son requeridos en
251 el idioma, como en: ``sizeof info`` después de que ``struct fileinfo info;``
252 se declare).
253
254 Así que use un espacio después de estas palabras clave::
255
256         if, switch, case, for, do, while
257
258 pero no con sizeof, typeof, alignof, o __attribute__. Por ejemplo,
259
260 .. code-block:: c
261
262
263         s = sizeof(struct file);
264
265 No agregue espacios alrededor (dentro) de expresiones entre paréntesis.
266 Este ejemplo es **malo**:
267
268 .. code-block:: c
269
270
271         s = sizeof( struct file );
272
273 Al declarar datos de puntero o una función que devuelve un tipo de puntero,
274 el uso preferido de ``*`` es adyacente al nombre del dato o nombre de la
275 función y no junto al nombre del tipo. Ejemplos:
276
277 .. code-block:: c
278
279
280         char *linux_banner;
281         unsigned long long memparse(char *ptr, char **retptr);
282         char *match_strdup(substring_t *s);
283
284 Use un espacio alrededor (a cada lado de) la mayoría de los operadores
285 binarios y ternarios, como cualquiera de estos::
286
287         =  +  -  <  >  *  /  %  |  &  ^  <=  >=  ==  !=  ?  :
288
289 pero sin espacio después de los operadores unarios::
290
291         &  *  +  -  ~  !  sizeof  typeof  alignof  __attribute__  defined
292
293 sin espacio antes de los operadores unarios de incremento y decremento del
294 sufijo::
295
296         ++  --
297
298 y sin espacio alrededor de los operadores de miembros de estructura ``.`` y
299 ``->``.
300
301 No deje espacios en blanco al final de las líneas. Algunos editores con
302 ``inteligente`` sangría insertarán espacios en blanco al comienzo de las
303 nuevas líneas como sea apropiado, para que pueda comenzar a escribir la
304 siguiente línea de código de inmediato. Sin embargo, algunos de estos
305 editores no eliminan los espacios en blanco si finalmente no termina
306 poniendo una línea de código allí, como si dejara una línea en blanco. Como
307 resultado, termina con líneas que contienen espacios en blanco al final.
308
309 Git le advertirá sobre los parches que introducen espacios en blanco al
310 final y puede, opcionalmente, eliminar los espacios en blanco finales por
311 usted; sin embargo, si se aplica una serie de parches, esto puede hacer que
312 los parches posteriores de la serie fallen al cambiar sus líneas de
313 contexto.
314
315
316 4) Nomenclatura
317 ---------------
318
319 C es un lenguaje espartano, y sus convenciones de nomenclatura deberían
320 seguir su ejemplo. A diferencia de los programadores de Modula-2 y Pascal,
321 los programadores de C no usan nombres cuquis como
322 EstaVariableEsUnContadorTemporal. Un programador de C lo llamaría
323 variable ``tmp``, que es mucho más fácil de escribir, y no es mas difícil
324 de comprender.
325
326 SIN EMBARGO, mientras que los nombres de mayúsculas y minúsculas están mal
327 vistos, los nombres descriptivos para las variables globales son
328 imprescindibles. Llamar a una función global ``foo`` es un delito.
329
330 Una variable GLOBAL (para usar solo si **realmente** las necesita) necesita
331 tener un nombre descriptivo, al igual que las funciones globales. Si tiene
332 una función que cuenta el número de usuarios activos, debe llamar a esta
333 ``contar_usuarios_activos()`` o similar, **no** debe llamarlo ``cntusr()``.
334
335 Codificar el tipo de una función en el nombre (lo llamado notación húngara)
336 es estúpido: el compilador conoce los tipos de todos modos y puede
337 verificar estos, y solo confunde al programador.
338
339 Los nombres de las variables LOCALES deben ser breves y directos. Si usted
340 tiene algún contador aleatorio de tipo entero, probablemente debería
341 llamarse ``i``. Llamarlo ``loop_counter`` no es productivo, si no hay
342 posibilidad de ser mal entendido. De manera similar, ``tmp`` puede ser casi
343 cualquier tipo de variable que se utiliza para contener un valor temporal.
344
345 Si tiene miedo de mezclar los nombres de las variables locales, tiene otro
346 problema, que se denomina síndrome de
347 función-crecimiento-desequilibrio-de-hormona. Vea el capítulo 6 (Funciones).
348
349 Para nombres de símbolos y documentación, evite introducir nuevos usos de
350 'master / slave' (maestro / esclavo) (o 'slave' independientemente de
351 'master') y 'lista negra / lista blanca' (backlist / whitelist).
352
353 Los reemplazos recomendados para 'maestro / esclavo' son:
354     '{primary,main} / {secondary,replica,subordinate}'
355     '{initiator,requester} / {target,responder}'
356     '{controller,host} / {device,worker,proxy}'
357     'leader / follower'
358     'director / performer'
359
360 Los reemplazos recomendados para 'backlist / whitelist' son:
361     'denylist / allowlist'
362     'blocklist / passlist'
363
364 Las excepciones para la introducción de nuevos usos son mantener en espacio
365 de usuario una ABI/API, o al actualizar la especificación del código de un
366 hardware o protocolo existente (a partir de 2020) que requiere esos
367 términos. Para nuevas especificaciones, traduzca el uso de la terminología
368 de la especificación al estándar de código del kernel donde sea posible.
369
370 5) Typedefs
371 -----------
372
373 Por favor no use cosas como ``vps_t``.
374 Es un **error** usar typedef para estructuras y punteros. cuando ve un
375
376 .. code-block:: c
377
378
379         vps_t a;
380
381 en el código fuente, ¿qué significa?
382 En cambio, si dice
383
384 .. code-block:: c
385
386         struct virtual_container *a;
387
388 puede decir qué es ``a`` en realidad.
389
390 Mucha gente piensa que  los typedefs ``ayudan a la legibilidad``. No. Son
391 útiles solamente para:
392
393  (a) objetos totalmente opacos (donde el typedef se usa activamente para
394      **ocultar** cuál es el objeto).
395
396      Ejemplo: ``pte_t`` etc. objetos opacos a los que solo puede acceder
397      usando las funciones de acceso adecuadas.
398
399      .. note::
400
401        La opacidad y las ``funciones de acceso`` no son buenas por sí
402        mismas. La razón por la que los tenemos para cosas como pte_t, etc.
403        es que hay real y absolutamente **cero** información accesible de
404        forma portátil allí.
405
406  (b) Tipos enteros claros, donde la abstracción **ayuda** a evitar
407      confusiones, ya sea ``int`` o ``long``.
408
409      u8/u16/u32 son definiciones tipográficas perfectamente correctas
410      aunque encajan en la categoría (d) mejor que aquí.
411
412      .. note::
413
414        De nuevo - debe haber una **razón** para esto. si algo es
415        ``unsigned long``, entonces no hay razón para hacerlo
416
417         typedef unsigned long mis_flags_t;
418
419      pero si hay una razón clara de por qué bajo ciertas circunstancias
420      podría ser un ``unsigned int`` y bajo otras configuraciones podría
421      ser ``unsigned long``, entonces, sin duda, adelante y use un typedef.
422
423  (c) cuando lo use para crear literalmente un tipo **nuevo** para
424      comprobación de tipos.
425
426  (d) Nuevos tipos que son idénticos a los tipos estándar C99, en ciertas
427      circunstancias excepcionales.
428
429      Aunque sólo costaría un corto período de tiempo para los ojos y
430      cerebro para acostumbrarse a los tipos estándar como ``uint32_t``,
431      algunas personas se oponen a su uso de todos modos.
432
433      Por lo tanto, los tipos ``u8/u16/u32/u64`` específicos de Linux y sus
434      equivalentes con signo, que son idénticos a los tipos estándar son
435      permitidos, aunque no son obligatorios en el nuevo código de su
436      elección.
437
438      Al editar código existente que ya usa uno u otro conjunto de tipos,
439      debe ajustarse a las opciones existentes en ese código.
440
441  (e) Tipos seguros para usar en el espacio de usuario.
442
443      En ciertas estructuras que son visibles para el espacio de usuario, no
444      podemos requerir tipos C99 y o utilizat el ``u32`` anterior. Por lo
445      tanto, usamos __u32 y tipos similares en todas las estructuras que se
446      comparten con espacio de usuario.
447
448 Tal vez también haya otros casos, pero la regla básicamente debería ser
449 NUNCA JAMÁS use un typedef a menos que pueda coincidir claramente con una
450 de estas reglas.
451
452 En general, un puntero o una estructura que tiene elementos que pueden
453 ser razonablemente accedidos directamente, **nunca** deben ser un typedef.
454
455 6) Funciones
456 ------------
457
458 Las funciones deben ser cortas y dulces, y hacer una sola cosa. Deberían
459 caber en una o dos pantallas de texto (el tamaño de pantalla ISO/ANSI es
460 80x24, como todos sabemos), y hacer una cosa y hacerla bien.
461
462 La longitud máxima de una función es inversamente proporcional a la
463 complejidad y el nivel de sangría de esa función. Entonces, si tiene una
464 función conceptualmente simple que es solo una larga (pero simple)
465 declaración de case, donde tiene que hacer un montón de pequeñas cosas para
466 un montón de diferentes casos, está bien tener una función más larga.
467
468 Sin embargo, si tiene una función compleja y sospecha que un estudiante de
469 primer año de secundaria menos que dotado podría no comprender de qué se
470 trata la función, debe adherirse a los límites máximos tanto más de
471 cerca. Use funciones auxiliares con nombres descriptivos (puede pedirle al
472 compilador que los alinee si cree que es crítico para el rendimiento, y
473 probablemente lo hará mejor de lo que usted hubiera hecho).
474
475 Otra medida de la función es el número de variables locales. Estas no deben
476 exceder de 5 a 10, o está haciendo algo mal. Piense de nuevo en la función
477 y divida en partes más pequeñas. Un cerebro humano puede generalmente
478 realiza un seguimiento de aproximadamente 7 cosas diferentes, cualquier
479 elemento más y se confunde. Usted sabe que es brillante, pero tal vez le
480 gustaría entender lo que hizo dentro de 2 semanas.
481
482 En los archivos fuente, separe las funciones con una línea en blanco. Si la
483 función es exportada, la macro **EXPORT** debería ponerse inmediatamente
484 después de la función de cierre de línea de llave. Por ejemplo:
485
486 .. code-block:: c
487
488         int sistema_corriendo(void)
489         {
490                 return estado_sistema == SISTEMA_CORRIENDO;
491         }
492         EXPORT_SYMBOL(sistema_corriendo);
493
494 6.1) Prototipos de funciones
495 ****************************
496
497 En los prototipos de funciones, incluya nombres de parámetros con sus tipos
498 de datos. Aunque esto no es requerido por el lenguaje C, se prefiere en
499 Linux porque es una forma sencilla de añadir información valiosa para el
500 lector.
501
502 No utilice la palabra clave ``extern`` con declaraciones de función ya que
503 esto hace las líneas más largas y no es estrictamente necesario.
504
505 Al escribir prototipos de funciones, mantenga el `orden de los elementos regular
506 <https://lore.kernel.org/mm-commits/CAHk-=wiOCLRny5aifWNhr621kYrJwhfURsa0vFPeUEm8mF0ufg@mail.gmail.com/>`_.
507 Por ejemplo, usando este ejemplo de declaración de función::
508
509  __init void * __must_check action(enum magic value, size_t size, u8 count,
510                                    char *fmt, ...) __printf(4, 5) __malloc;
511
512 El orden preferido de elementos para un prototipo de función es:
513
514 - clase de almacenamiento (a continuación, ``static __always_inline``,
515   teniendo en cuenta que ``__always_inline`` es técnicamente un atributo
516   pero se trata como ``inline``)
517 - atributos de clase de almacenamiento (aquí, ``__init`` -- es decir,
518   declaraciones de sección, pero también cosas como ``__cold``)
519 - tipo de retorno (aquí, ``void *``)
520 - atributos de tipo de retorno (aquí, ``__must_check``)
521 - nombre de la función (aquí, ``action``)
522 - parámetros de la función (aquí, ``(enum magic value, size_t size, u8 count, char *fmt, ...)``,
523   teniendo en cuenta que los nombres de los parámetros siempre deben
524   incluirse)
525 - atributos de parámetros de función (aquí, ``__printf(4, 5)``)
526 - atributos de comportamiento de la función (aquí, ``__malloc``)
527
528 Tenga en cuenta que para una **definición** de función (es decir, el cuerpo
529 real de la función), el compilador no permite atributos de parámetros de
530 función después de parámetros de la función. En estos casos, deberán ir
531 tras los atributos de clase (por ejemplo, tenga en cuenta el cambio de
532 posición de ``__printf(4, 5)`` a continuación, en comparación con el
533 ejemplo de **declaración** anterior)::
534
535  static __always_inline __init __printf(4, 5) void * __must_check action(enum magic value,
536                 size_t size, u8 count, char *fmt, ...) __malloc
537  {
538         ...
539  }
540
541 7) Salida centralizada de funciones
542 -----------------------------------
543
544 Aunque desaprobado por algunas personas, el equivalente de la instrucción
545 goto es utilizado con frecuencia por los compiladores, en forma de
546 instrucción de salto incondicional.
547
548 La declaración goto es útil cuando una función sale desde múltiples
549 ubicaciones y se deben realizar algunos trabajos comunes, como la limpieza.
550 Si no se necesita limpieza, entonces simplemente haga return directamente.
551
552 Elija nombres de etiquetas que digan qué hace el goto o por qué existe el
553 goto. Un ejemplo de un buen nombre podría ser ``out_free_buffer:``
554 (``salida_liberar_buffer``) si al irse libera ``buffer``. Evite usar
555 nombres GW-BASIC como ``err1:`` y ``err2:``, ya que tendría que volver a
556 numerarlos si alguna vez agrega o elimina rutas de salida, y hacen que sea
557 difícil de verificar que sean correctos, de todos modos.
558
559 La razón para usar gotos es:
560
561 - Las declaraciones incondicionales son más fáciles de entender y seguir.
562 - se reduce el anidamiento
563 - errores al no actualizar los puntos de salida individuales al hacer
564   modificaciones son evitados
565 - ahorra el trabajo del compilador de optimizar código redundante ;)
566
567 .. code-block:: c
568
569         int fun(int a)
570         {
571                 int result = 0;
572                 char *buffer;
573
574                 buffer = kmalloc(SIZE, GFP_KERNEL);
575                 if (!buffer)
576                         return -ENOMEM;
577
578                 if (condition1) {
579                         while (loop1) {
580                                 ...
581                         }
582                         result = 1;
583                         goto out_free_buffer;
584                 }
585                 ...
586         out_free_buffer:
587                 kfree(buffer);
588                 return result;
589         }
590
591 Un tipo común de error a tener en cuenta es "un error de error" que es algo
592 así:
593
594 .. code-block:: c
595
596         err:
597                 kfree(foo->bar);
598                 kfree(foo);
599                 return ret;
600
601 El error en este código es que en algunas rutas de salida, ``foo`` es NULL.
602 Normalmente la solución para esto es dividirlo en dos etiquetas de error
603 ``err_free_bar:`` y ``err_free_foo:``:
604
605 .. code-block:: c
606
607         err_free_bar:
608                 kfree(foo->bar);
609         err_free_foo:
610                 kfree(foo);
611                 return ret;
612
613 Idealmente, debería simular errores para probar todas las rutas de salida.
614
615
616 8) Comentarios
617 --------------
618
619 Los comentarios son buenos, pero también existe el peligro de comentar
620 demasiado. NUNCA trate de explicar CÓMO funciona su código en un
621 comentario: es mucho mejor escribir el código para que el
622 **funcionamiento** sea obvio y es una pérdida de tiempo explicar código mal
623 escrito.
624
625 Generalmente, desea que sus comentarios digan QUÉ hace su código, no CÓMO.
626 Además, trate de evitar poner comentarios dentro del cuerpo de una función:
627 si la función es tan compleja que necesita comentar por separado partes de
628 esta, probablemente debería volver al capítulo 6 una temporada. Puede
629 hacer pequeños comentarios para notar o advertir sobre algo particularmente
630 inteligente (o feo), pero trate de evitar el exceso. En su lugar, ponga los
631 comentarios al principio de la función, diga a la gente lo que hace y
632 posiblemente POR QUÉ hace esto.
633
634 Al comentar las funciones de la API del kernel, utilice el formato
635 kernel-doc. Consulte los archivos en :ref:`Documentation/doc-guide/ <doc_guide>`
636 y ``scripts/kernel-doc`` para más detalles.
637
638 El estilo preferido para comentarios largos (de varias líneas) es:
639
640 .. code-block:: c
641
642         /*
643         * Este es el estilo preferido para comentarios
644         * multilínea en el código fuente del kernel Linux.
645         * Por favor, utilícelo constantemente.
646         *
647         * Descripción: Una columna de asteriscos en el lado izquierdo,
648         * con líneas iniciales y finales casi en blanco.
649         */
650
651 Para archivos en net/ y drivers/net/, el estilo preferido para comentarios
652 largos (multi-linea) es un poco diferente.
653
654 .. code-block:: c
655
656         /* El estilo de comentario preferido para archivos en net/ y drivers/net
657         * se asemeja a esto.
658         *
659         * Es casi lo mismo que el estilo de comentario generalmente preferido,
660         * pero no hay una línea inicial casi en blanco.
661         */
662
663 También es importante comentar los datos, ya sean tipos básicos o
664 derivados. Para este fin, use solo una declaración de datos por línea (sin
665 comas para múltiples declaraciones de datos). Esto le deja espacio para un
666 pequeño comentario sobre cada elemento, explicando su uso.
667
668 9) Has hecho un desastre
669 ---------------------------
670
671 Está bien, todos lo hacemos. Probablemente un antiguo usuario de Unix le
672 haya dicho que ``GNU emacs`` formatea automáticamente las fuentes C por
673 usted, y ha notado que sí, lo hace, pero los por defecto que tiene son
674 menos que deseables (de hecho, son peores que los aleatorios) escribiendo -
675 un número infinito de monos escribiendo en GNU emacs nunca harán un buen
676 programa).
677
678 Por lo tanto, puede deshacerse de GNU emacs o cambiarlo y usar valores más
679 sanos. Para hacer esto último, puede pegar lo siguiente en su archivo
680 .emacs:
681
682 .. code-block:: none
683
684   (defun c-lineup-arglist-tabs-only (ignored)
685     "Line up argument lists by tabs, not spaces"
686     (let* ((anchor (c-langelem-pos c-syntactic-element))
687            (column (c-langelem-2nd-pos c-syntactic-element))
688            (offset (- (1+ column) anchor))
689            (steps (floor offset c-basic-offset)))
690       (* (max steps 1)
691          c-basic-offset)))
692
693   (dir-locals-set-class-variables
694    'linux-kernel
695    '((c-mode . (
696           (c-basic-offset . 8)
697           (c-label-minimum-indentation . 0)
698           (c-offsets-alist . (
699                   (arglist-close         . c-lineup-arglist-tabs-only)
700                   (arglist-cont-nonempty .
701                       (c-lineup-gcc-asm-reg c-lineup-arglist-tabs-only))
702                   (arglist-intro         . +)
703                   (brace-list-intro      . +)
704                   (c                     . c-lineup-C-comments)
705                   (case-label            . 0)
706                   (comment-intro         . c-lineup-comment)
707                   (cpp-define-intro      . +)
708                   (cpp-macro             . -1000)
709                   (cpp-macro-cont        . +)
710                   (defun-block-intro     . +)
711                   (else-clause           . 0)
712                   (func-decl-cont        . +)
713                   (inclass               . +)
714                   (inher-cont            . c-lineup-multi-inher)
715                   (knr-argdecl-intro     . 0)
716                   (label                 . -1000)
717                   (statement             . 0)
718                   (statement-block-intro . +)
719                   (statement-case-intro  . +)
720                   (statement-cont        . +)
721                   (substatement          . +)
722                   ))
723           (indent-tabs-mode . t)
724           (show-trailing-whitespace . t)
725           ))))
726
727   (dir-locals-set-directory-class
728    (expand-file-name "~/src/linux-trees")
729    'linux-kernel)
730
731 Esto hará que emacs funcione mejor con el estilo de código del kernel para
732 C en archivos bajo ``~/src/linux-trees``.
733
734 Pero incluso si no logra que emacs realice un formateo correcto, no todo
735 está perdido: use ``indent``.
736
737 Ahora bien, de nuevo, la sangría de GNU tiene la misma configuración de
738 muerte cerebral que GNU emacs tiene, por lo que necesita darle algunas
739 opciones de línea de comando. Sin embargo, eso no es tan malo, porque
740 incluso los creadores de GNU indent reconocen la autoridad de K&R (la gente
741 de GNU no es mala, solo están gravemente equivocados en este asunto), por
742 lo que simplemente de a la sangría las opciones ``-kr -i8`` (significa
743 ``K&R, guiones de 8 caracteres``), o use ``scripts/Lindent``, que indenta
744 con ese estilo.
745
746 ``indent`` tiene muchas opciones, y especialmente cuando se trata de
747 comentar reformateos, es posible que desee echar un vistazo a la página del
748 manual. Pero recuerde: ``indent`` no es la solución para una mala
749 programación.
750
751 Tenga en cuenta que también puede usar la herramienta ``clang-format`` para
752 ayudarlo con estas reglas, para volver a formatear rápidamente partes de su
753 código automáticamente, y revisar archivos completos para detectar errores
754 de estilo del código, errores tipográficos y posibles mejoras. También es
755 útil para ordenar ``#includes``, para alinear variables/macros, para
756 redistribuir texto y otras tareas similares. Vea el archivo
757 :ref:`Documentation/process/clang-format.rst <clangformat>` para más
758 detalles.
759
760 10) Archivos de configuración de Kconfig
761 ----------------------------------------
762
763 Para todos los archivos de configuración de Kconfig* en todo el árbol
764 fuente, la sangría es algo diferente. Las líneas bajo una definición
765 ``config`` están indentadas con una tabulación, mientras que el texto de
766 ayuda tiene una sangría adicional de dos espacios. Ejemplo::
767
768   config AUDIT
769         bool "Soporte para auditar"
770         depends on NET
771         help
772           Habilita la infraestructura de auditoría que se puede usar con otro
773           subsistema kernel, como SELinux (que requiere esto para
774           registro de salida de mensajes avc). No hace auditoría de llamadas al
775     sistema sin CONFIG_AUDITSYSCALL.
776
777 Características seriamente peligrosas (como soporte de escritura para
778 ciertos filesystems) deben anunciar esto de forma destacada en su cadena de
779 solicitud::
780
781   config ADFS_FS_RW
782         bool "ADFS write support (DANGEROUS)"
783         depends on ADFS_FS
784         ...
785
786 Para obtener la documentación completa sobre los archivos de configuración,
787 consulte el archivo Documentation/kbuild/kconfig-language.rst.
788
789
790 11) Estructuras de datos
791 ------------------------
792
793 Las estructuras de datos que tienen visibilidad fuera del contexto de un
794 solo subproceso en el que son creadas y destruidas, siempre debe tener
795 contadores de referencia. En el kernel, la recolección de basura no existe
796 (y fuera, la recolección de basura del kernel es lenta e ineficiente), lo
797 que significa que absolutamente **tiene** para hacer referencia y contar
798 todos sus usos.
799
800 El conteo de referencias significa que puede evitar el bloqueo y permite
801 que múltiples usuarios tengan acceso a la estructura de datos en paralelo -
802 y no tengan que preocuparse de que la estructura, de repente, desaparezca
803 debajo de su control, solo porque durmieron o hicieron otra cosa por un
804 tiempo.
805
806 Tenga en cuenta que el bloqueo **no** reemplaza el recuento de referencia.
807 El bloqueo se utiliza para mantener la coherencia de las estructuras de
808 datos, mientras que la referencia y contar es una técnica de gestión de
809 memoria. Por lo general, ambos son necesarios, y no deben confundirse entre
810 sí.
811
812 De hecho, muchas estructuras de datos pueden tener dos niveles de conteo de
813 referencias, cuando hay usuarios de diferentes ``clases``. El conteo de
814 subclases cuenta el número de usuarios de la subclase y disminuye el conteo
815 global solo una vez, cuando el recuento de subclases llega a cero.
816
817 Se pueden encontrar ejemplos de este tipo de ``recuento de referencias de
818 niveles múltiples`` en la gestión de memoria (``struct mm_struct``:
819 mm_users y mm_count), y en código del sistema de archivos
820 (``struct super_block``: s_count y s_active).
821
822 Recuerde: si otro hilo puede encontrar su estructura de datos y usted no
823 tiene un recuento de referencias, es casi seguro que tiene un error.
824
825 12) Macros, Enums y RTL
826 ------------------------
827
828 Los nombres de macros que definen constantes y etiquetas en enumeraciones
829 (enums) están en mayúsculas.
830
831 .. code-block:: c
832
833         #define CONSTANTE 0x12345
834
835 Se prefieren los enums cuando se definen varias constantes relacionadas.
836
837 Se aprecian los nombres de macro en MAYÚSCULAS, pero las macros que se
838 asemejan a funciones puede ser nombradas en minúscula.
839
840 Generalmente, las funciones en línea son preferibles a las macros que se
841 asemejan a funciones.
842
843 Las macros con varias instrucciones deben contenerse en un bloque do-while:
844
845 .. code-block:: c
846
847         #define macrofun(a, b, c)                       \
848                 do {                                    \
849                         if (a == 5)                     \
850                                 haz_esto(b, c);         \
851                 } while (0)
852
853 Cosas a evitar al usar macros:
854
855 1) macros que afectan el flujo de control:
856
857 .. code-block:: c
858
859         #define FOO(x)                                  \
860                 do {                                    \
861                         if (blah(x) < 0)                \
862                                 return -EBUGGERED;      \
863                 } while (0)
864
865 es una **muy** mala idea. Parece una llamada de función pero sale de la
866 función de ``llamada``; no rompa los analizadores internos de aquellos que
867 leerán el código.
868
869 2) macros que dependen de tener una variable local con un nombre mágico:
870
871 .. code-block:: c
872
873         #define FOO(val) bar(index, val)
874
875 puede parecer algo bueno, pero es confuso como el infierno cuando uno lee
876 el código, y es propenso a romperse por cambios aparentemente inocentes.
877
878 3) macros con argumentos que se usan como valores l: FOO(x) = y; le van
879 a morder si alguien, por ejemplo, convierte FOO en una función en línea.
880
881 4) olvidarse de la precedencia: las macros que definen constantes usando
882 expresiones deben encerrar la expresión entre paréntesis. Tenga cuidado con
883 problemas similares con macros usando parámetros.
884
885 .. code-block:: c
886
887         #define CONSTANTE 0x4000
888         #define CONSTEXP (CONSTANTE | 3)
889
890 5) colisiones de espacio de nombres ("namespace") al definir variables
891 locales en macros que se asemejan a funciones:
892
893 .. code-block:: c
894
895         #define FOO(x)                          \
896         ({                                      \
897                 typeof(x) ret;                  \
898                 ret = calc_ret(x);              \
899                 (ret);                          \
900         })
901
902 ret es un nombre común para una variable local -es menos probable que
903 __foo_ret colisione (coincida) con una variable existente.
904
905 El manual de cpp trata las macros de forma exhaustiva. El manual interno de
906 gcc también cubre RTL, que se usa frecuentemente con lenguaje ensamblador
907 en el kernel.
908
909 13) Imprimir mensajes del kernel
910 --------------------------------
911
912 A los desarrolladores del kernel les gusta ser vistos como alfabetizados.
913 Cuide la ortografía de los mensajes del kernel para causar una buena
914 impresión. No utilice contracciones incorrectas como ``dont``; use
915 ``do not`` o ``don't`` en su lugar. Haga sus mensajes concisos, claros e
916 inequívocos.
917
918 Los mensajes del kernel no tienen que terminar con un punto.
919
920 Imprimir números entre paréntesis (%d) no agrega valor y debe evitarse.
921
922 Hay varias modelos de macros de diagnóstico de driver en <linux/dev_printk.h>
923 que debe usar para asegurarse de que los mensajes coincidan con el
924 dispositivo correcto y driver, y están etiquetados con el nivel correcto:
925 dev_err(), dev_warn(), dev_info(), y así sucesivamente. Para mensajes que
926 no están asociados con un dispositivo particular, <linux/printk.h> define
927 pr_notice(), pr_info(), pr_warn(), pr_err(), etc.
928
929 Crear buenos mensajes de depuración puede ser todo un desafío; y una vez
930 los tiene, pueden ser de gran ayuda para la resolución remota de problemas.
931 Sin embargo, la impresión de mensajes de depuración se maneja de manera
932 diferente a la impresión de otros mensajes que no son de depuración.
933 Mientras que las otras funciones pr_XXX() se imprimen incondicionalmente,
934 pr_debug() no lo hace; se compila fuera por defecto, a menos que DEBUG sea
935 definido o se establezca CONFIG_DYNAMIC_DEBUG. Eso es cierto para dev_dbg()
936 también, y una convención relacionada usa VERBOSE_DEBUG para agregar
937 mensajes dev_vdbg() a los ya habilitados por DEBUG.
938
939 Muchos subsistemas tienen opciones de depuración de Kconfig para activar
940 -DDEBUG en el Makefile correspondiente; en otros casos, los archivos
941 usan #define DEBUG. Y cuando un mensaje de depuración debe imprimirse
942 incondicionalmente, por ejemplo si es ya dentro de una sección #ifdef
943 relacionada con la depuración, printk(KERN_DEBUG ...) puede ser usado.
944
945 14) Reservando memoria
946 ----------------------
947
948 El kernel proporciona los siguientes asignadores de memoria de propósito
949 general: kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc() y
950 vzalloc(). Consulte la documentación de la API para obtener más información.
951 a cerca de ellos. :ref:`Documentation/core-api/memory-allocation.rst
952 <memory_allocation>`
953
954 La forma preferida para pasar el tamaño de una estructura es la siguiente:
955
956 .. code-block:: c
957
958         p = kmalloc(sizeof(*p), ...);
959
960 La forma alternativa donde se deletrea el nombre de la estructura perjudica
961 la legibilidad, y presenta una oportunidad para un error cuando se cambia
962 el tipo de variable de puntero, pero el tamaño correspondiente de eso que
963 se pasa a un asignador de memoria no.
964
965 Convertir el valor devuelto, que es un puntero vacío, es redundante. La
966 conversión desde el puntero vacío a cualquier otro tipo de puntero está
967 garantizado por la programación en idioma C.
968
969 La forma preferida para asignar una matriz es la siguiente:
970
971 .. code-block:: c
972
973         p = kmalloc_array(n, sizeof(...), ...);
974
975 La forma preferida para asignar una matriz a cero es la siguiente:
976
977 .. code-block:: c
978
979         p = kcalloc(n, sizeof(...), ...);
980
981 Ambos casos verifican el desbordamiento en el tamaño de asignación n *
982 sizeof (...), y devuelven NULL si esto ocurrió.
983
984 Todas estas funciones de asignación genéricas emiten un volcado de pila
985 (" stack dump") en caso de fallo cuando se usan sin __GFP_NOWARN, por lo
986 que no sirve de nada emitir un mensaje de fallo adicional cuando se
987 devuelva NULL.
988
989 15) La enfermedad de inline
990 ----------------------------
991
992 Parece haber una común percepción errónea de que gcc tiene una magica
993 opción "hazme más rápido" de aceleración, llamada ``inline`` (en línea).
994 Mientras que el uso de inlines puede ser apropiado (por ejemplo, como un
995 medio para reemplazar macros, consulte el Capítulo 12), muy a menudo no lo
996 es. El uso abundante de la palabra clave inline conduce a una mayor kernel,
997 que a su vez ralentiza el sistema en su conjunto, debido a una mayor huella
998 de icache para la CPU, y sencillamente porque hay menos memoria disponible
999 para el pagecache. Solo piense en esto; un fallo en la memoria caché de la
1000 página provoca una búsqueda de disco, que tarda fácilmente 5 milisegundos.
1001 Hay MUCHOS ciclos de CPU que puede entrar en estos 5 milisegundos.
1002
1003 Una razonable regla general es no poner funciones inline que tengan más de
1004 3 líneas de código en ellas. Una excepción a esta regla son los casos en
1005 que se sabe que un parámetro es una constante en tiempo de compilación, y
1006 como resultado de esto, usted *sabe*, el compilador podrá optimizar la
1007 mayor parte de su función en tiempo de compilación. Para un buen ejemplo de
1008 este último caso, véase la función en línea kmalloc().
1009
1010 A menudo, la gente argumenta que agregar funciones en línea que son
1011 estáticas y se usan solo una vez, es siempre una victoria ya que no hay
1012 perdida de espacio. Mientras esto es técnicamente correcto, gcc es capaz de
1013 incorporarlos automáticamente sin ayuda, y esta el problema de
1014 mantenimiento de eliminar el inline, cuando un segundo usuario supera el
1015 valor potencial de la pista que le dice a gcc que haga algo que habría
1016 hecho de todos modos.
1017
1018 16) Valores devueltos por función y sus nombres
1019 -----------------------------------------------
1020
1021 Las funciones pueden devolver valores de muchos tipos diferentes, y uno de
1022 lo más común es un valor que indica si la función tuvo éxito o ha fallado.
1023 Dicho valor se puede representar como un número entero de código de error
1024 (-Exxx = falla, 0 = éxito) o un booleano ``con éxito`` (0 = falla, distinto
1025 de cero = éxito).
1026
1027 La mezcla de estos dos tipos de representaciones es una fuente fértil de
1028 errores difíciles de encontrar. Si el lenguaje C incluyera una fuerte
1029 distinción entre enteros y booleanos, el compilador encontraría estos
1030 errores por nosotros... pero no lo hace. Para ayudar a prevenir tales
1031 errores, siga siempre esta convención::
1032
1033         Si el nombre de una función es una acción o un comando imperativo,
1034         la función debe devolver un número entero de código de error. si el nombre
1035         es un predicado, la función debe devolver un valor booleano "exitoso".
1036
1037 Por ejemplo, ``agregar trabajo`` es un comando, y la función
1038 agregar_trabajo() devuelve 0 en caso de éxito o -EBUSY en caso de fracaso.
1039 De la misma manera, ``dispositivo PCI presente`` es un predicado, y la
1040 función pci_dev_present() devuelve 1 si tiene éxito en encontrar un
1041 dispositivo coincidente o 0 si no es así.
1042
1043 Todas las funciones EXPORTed (exportadas) deben respetar esta convención,
1044 al igual que todas las funciones publicas. Las funciones privadas
1045 (estáticas) no lo necesitan, pero es recomendado que lo hagan.
1046
1047 Las funciones cuyo valor devuelto es el resultado real de un cálculo, en
1048 lugar de una indicación de si el cómputo tuvo éxito, no están sujetas a
1049 esta regla. Generalmente indican fallo al devolver valores fuera del rango
1050 de resultados. Los ejemplos típicos serían funciones que devuelven
1051 punteros; estos usan NULL o el mecanismo ERR_PTR para informar de fallos.
1052
1053 17) Usando bool
1054 ----------------
1055
1056 El tipo bool del kernel Linux es un alias para el tipo C99 _Bool. Los
1057 valores booleanos pueden solo evaluar a 0 o 1, y la conversión implícita o
1058 explícita a bool convierte automáticamente el valor en verdadero o falso.
1059 Cuando se utilizan tipos booleanos,
1060 !! no se necesita construcción, lo que elimina una clase de errores.
1061
1062 Cuando se trabaja con valores booleanos, se deben usar las definiciones
1063 verdadera y falsa, en lugar de 1 y 0.
1064
1065 Los tipos de devolución de función bool y las variables de pila siempre
1066 se pueden usar cuando esto sea adecuado. Se recomienda el uso de bool para
1067 mejorar la legibilidad y, a menudo, es una mejor opción que 'int' para
1068 almacenar valores booleanos.
1069
1070 No use bool si el diseño de la línea de caché o el tamaño del valor son
1071 importantes, ya que su tamaño y la alineación varía según la arquitectura
1072 compilada. Las estructuras que son optimizadas para la alineación y el
1073 tamaño no debe usar bool.
1074
1075 Si una estructura tiene muchos valores verdadero/falso, considere
1076 consolidarlos en un bitfield con miembros de 1 bit, o usando un tipo de
1077 ancho fijo apropiado, como u8.
1078
1079 De manera similar, para los argumentos de función, se pueden consolidar
1080 muchos valores verdaderos/falsos en un solo argumento bit a bit 'flags' y
1081 'flags' a menudo, puede ser una alternativa de argumento más legible si los
1082 sitios de llamada tienen constantes desnudas de tipo verdaderas/falsas.
1083
1084 De lo contrario, el uso limitado de bool en estructuras y argumentos puede
1085 mejorar la legibilidad.
1086
1087 18) No reinvente las macros del kernel
1088 ---------------------------------------
1089
1090 El archivo de cabecera include/linux/kernel.h contiene una serie de macros
1091 que debe usar, en lugar de programar explícitamente alguna variante de
1092 estos por usted mismo. Por ejemplo, si necesita calcular la longitud de una
1093 matriz, aproveche la macro
1094
1095 .. code-block:: c
1096
1097         #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
1098
1099 De manera similar, si necesita calcular el tamaño de algún miembro de la
1100 estructura, use
1101
1102 .. code-block:: c
1103
1104         #define sizeof_field(t, f) (sizeof(((t*)0)->f))
1105
1106 También hay macros min() y max() que realizan una verificación estricta de
1107 tipos si lo necesita. Siéntase libre de leer detenidamente ese archivo de
1108 encabezado para ver qué más ya está definido y que no debe reproducir en su
1109 código.
1110
1111 19) Editores modeline y otros desastres
1112 ---------------------------------------
1113
1114 Algunos editores pueden interpretar la información de configuración
1115 incrustada en los archivos fuente, indicado con marcadores especiales. Por
1116 ejemplo, emacs interpreta las líneas marcadas como esto:
1117
1118 .. code-block:: c
1119
1120         -*- mode: c -*-
1121
1122 O así:
1123
1124 .. code-block:: c
1125
1126         /*
1127         Local Variables:
1128         compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
1129         End:
1130         */
1131
1132 Vim interpreta los marcadores que se ven así:
1133
1134 .. code-block:: c
1135
1136         /* vim:set sw=8 noet */
1137
1138 No incluya ninguno de estos en los archivos fuente. La gente tiene sus
1139 propias configuraciones del editor, y sus archivos de origen no deben
1140 anularlos. Esto incluye marcadores para sangría y configuración de modo.
1141 La gente puede usar su propio modo personalizado, o puede tener algún otro
1142 método mágico para que la sangría funcione correctamente.
1143
1144
1145 20) Ensamblador inline
1146 -----------------------
1147
1148 En el código específico de arquitectura, es posible que deba usar
1149 ensamblador en línea para interactuar con funcionalidades de CPU o
1150 plataforma. No dude en hacerlo cuando sea necesario. Sin embargo, no use
1151 ensamblador en línea de forma gratuita cuando C puede hacer el trabajo.
1152 Puede y debe empujar el hardware desde C cuando sea posible.
1153
1154 Considere escribir funciones auxiliares simples que envuelvan bits comunes
1155 de ensamblador, en lugar de escribirlos repetidamente con ligeras
1156 variaciones. Recuerde que el ensamblador en línea puede usar parámetros C.
1157
1158 Las funciones de ensamblador grandes y no triviales deben ir en archivos .S,
1159 con su correspondientes prototipos de C definidos en archivos de encabezado
1160 en C. Los prototipos de C para el ensamblador deben usar ``asmlinkage``.
1161
1162 Es posible que deba marcar su declaración asm como volátil, para evitar que
1163 GCC la elimine si GCC no nota ningún efecto secundario. No siempre es
1164 necesario hacerlo, sin embargo, y hacerlo innecesariamente puede limitar la
1165 optimización.
1166
1167 Al escribir una sola declaración de ensamblador en línea que contiene
1168 múltiples instrucciones, ponga cada instrucción en una línea separada en
1169 una string separada, y termine cada string excepto la última con ``\n\t``
1170 para indentar correctamente la siguiente instrucción en la salida en
1171 ensamblador:
1172
1173 .. code-block:: c
1174
1175         asm ("magic %reg1, #42\n\t"
1176              "more_magic %reg2, %reg3"
1177              : /* outputs */ : /* inputs */ : /* clobbers */);
1178
1179 21) Compilación condicional
1180 ---------------------------
1181
1182 Siempre que sea posible, no use condicionales de preprocesador (#if,
1183 #ifdef) en archivos .c; de lo contrario, el código es más difícil de leer y
1184 la lógica más difícil de seguir. En cambio, use dichos condicionales en un
1185 archivo de encabezado que defina funciones para usar en esos archivos .c,
1186 proporcionando versiones de código auxiliar sin operación en el caso #else,
1187 y luego llame a estas funciones incondicionalmente desde archivos .c. El
1188 compilador evitará generar cualquier código para las llamadas restantes,
1189 produciendo resultados idénticos, pero la lógica es fácil de seguir.
1190
1191 Prefiera compilar funciones completas, en lugar de porciones de funciones o
1192 porciones de expresiones. En lugar de poner un ifdef en una expresión,
1193 divida la totalidad de la expresión con una función de ayuda independiente
1194 y aplique el condicional a esa función.
1195
1196 Si tiene una función o variable que puede potencialmente quedar sin usar en
1197 una configuración en particular, y el compilador advertiría sobre su
1198 definición sin usar, marque la definición como __maybe_unused en lugar de
1199 envolverla en un preprocesador condicional. (Sin embargo, si una función o
1200 variable *siempre* acaba sin ser usada, bórrela.)
1201
1202 Dentro del código, cuando sea posible, use la macro IS_ENABLED para
1203 convertir un símbolo Kconfig en una expresión booleana de C, y utilícelo en
1204 un condicional de C normal:
1205
1206 .. code-block:: c
1207
1208         if (IS_ENABLED(CONFIG_SOMETHING)) {
1209                 ...
1210         }
1211
1212 El compilador "doblará"" constantemente el condicional e incluirá o
1213 excluirá el bloque de código al igual que con un #ifdef, por lo que esto no
1214 agregará ningún tiempo de gastos generales en ejecución. Sin embargo, este
1215 enfoque todavía permite que el compilador de C vea el código dentro del
1216 bloque, y verifique que sea correcto (sintaxis, tipos, símbolo, referencias,
1217 etc.). Por lo tanto, aún debe usar un #ifdef si el código dentro del bloque
1218 hace referencia a símbolos que no existirán si no se cumple la condición.
1219
1220 Al final de cualquier bloque #if o #ifdef no trivial (más de unas pocas
1221 líneas), incluya un comentario después de #endif en la misma línea,
1222 anotando la expresión condicional utilizada. Por ejemplo:
1223
1224 .. code-block:: c
1225
1226         #ifdef CONFIG_SOMETHING
1227         ...
1228         #endif /* CONFIG_SOMETHING */
1229
1230 22) No rompa el kernel
1231 -----------------------
1232
1233 En general, la decisión de romper el kernel pertenece al usuario, más que
1234 al desarrollador del kernel.
1235
1236 Evite el panic()
1237 ****************
1238
1239 panic() debe usarse con cuidado y principalmente solo durante el arranque
1240 del sistema. panic() es, por ejemplo, aceptable cuando se queda sin memoria
1241 durante el arranque y no puede continuar.
1242
1243 Use WARN() en lugar de BUG()
1244 ****************************
1245
1246 No agregue código nuevo que use cualquiera de las variantes BUG(), como
1247 BUG(), BUG_ON() o VM_BUG_ON(). En su lugar, use una variante WARN*(),
1248 preferiblemente WARN_ON_ONCE(), y posiblemente con código de recuperación.
1249 El código de recuperación no es requerido si no hay una forma razonable de
1250 recuperar, al menos parcialmente.
1251
1252 "Soy demasiado perezoso para tener en cuenta los errores" no es una excusa
1253 para usar BUG(). Importantes corrupciones internas sin forma de continuar
1254 aún pueden usar BUG(), pero necesitan una buena justificación.
1255
1256 Use WARN_ON_ONCE() en lugar de WARN() o WARN_ON()
1257 *************************************************
1258
1259 Generalmente, se prefiere WARN_ON_ONCE() a WARN() o WARN_ON(), porque es
1260 común que una condición de advertencia dada, si ocurre, ocurra varias
1261 veces. Esto puede llenar el registro del kernel, e incluso puede ralentizar
1262 el sistema lo suficiente como para que el registro excesivo se convierta en
1263 su propio, adicional problema.
1264
1265 No haga WARN a la ligera
1266 ************************
1267
1268 WARN*() está diseñado para situaciones inesperadas que nunca deberían
1269 suceder. Las macros WARN*() no deben usarse para nada que se espera que
1270 suceda durante un funcionamiento normal. No hay "checkeos" previos o
1271 posteriores a la condición, por ejemplo. De nuevo: WARN*() no debe usarse
1272 para una condición esperada que vaya a activarse fácilmente, por ejemplo,
1273 mediante acciones en el espacio del usuario. pr_warn_once() es una
1274 alternativa posible, si necesita notificar al usuario de un problema.
1275
1276 No se preocupe sobre panic_on_warn de usuarios
1277 **********************************************
1278
1279 Algunas palabras más sobre panic_on_warn: Recuerde que ``panic_on_warn`` es
1280 una opción disponible del kernel, y que muchos usuarios configuran esta
1281 opción. Esta es la razón por la que hay un artículo de "No haga WARN a la
1282 ligera", arriba. Sin embargo, la existencia de panic_on_warn de usuarios no
1283 es una razón válida para evitar el uso juicioso de WARN*(). Esto se debe a
1284 que quien habilita panic_on_warn, explícitamente pidió al kernel que
1285 fallara si se dispara un WARN*(), y tales usuarios deben estar preparados
1286 para afrontar las consecuencias de un sistema que es algo más probable que
1287 se rompa.
1288
1289 Use BUILD_BUG_ON() para aserciones en tiempo de compilación
1290 ***********************************************************
1291
1292 El uso de BUILD_BUG_ON() es aceptable y recomendado, porque es una aserción
1293 en tiempo de compilación, que no tiene efecto en tiempo de ejecución.
1294
1295 Apéndice I) Referencias
1296 -----------------------
1297
1298 The C Programming Language, Segunda edicion
1299 por Brian W. Kernighan and Dennis M. Ritchie.
1300 Prentice Hall, Inc., 1988.
1301 ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
1302
1303 The Practice of Programming
1304 por Brian W. Kernighan and Rob Pike.
1305 Addison-Wesley, Inc., 1999.
1306 ISBN 0-201-61586-X.
1307
1308 manuales GCC - en cumplimiento con K&R y este texto - para cpp, gcc,
1309 detalles de gcc y sangría, todo disponible en https://www.gnu.org/manual/
1310
1311 WG14 es el grupo de trabajo de estandarización internacional de la
1312 programación en lenguaje C, URL: http://www.open-std.org/JTC1/SC22/WG14/
1313
1314 :ref:`process/coding-style.rst <codingstyle>` del kernel, por greg@kroah.com at OLS 2002:
1315 http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/