File Index
Files and directories
Sign in
FILE

coding-style.rst

File preview with syntax highlighting.

linux-6.19.14/Documentation/translations/sp_SP/process/coding-style.rst RESTRUCTUREDTEXT
   1.. include:: ../disclaimer-sp.rst
   2
   3:Original: :ref:`Documentation/process/coding-style.rst <submittingpatches>`
   4:Translator: Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
   5
   6.. _sp_codingstyle:
   7
   8Estilo en el código del kernel Linux
   9=====================================
  10
  11Este es un breve documento que describe el estilo preferido en el código
  12del kernel Linux. El estilo de código es muy personal y no **forzaré** mi
  13puntos de vista sobre nadie, pero esto vale para todo lo que tengo que
  14mantener, y preferiría que para la mayoría de otras cosas también. Por
  15favor, por lo menos considere los argumentos expuestos aquí.
  16
  17En primer lugar, sugeriría imprimir una copia de los estándares de código
  18GNU, y NO leerlo. Quémelos, es un gran gesto simbólico.
  19
  20De todos modos, aquí va:
  21
  22
  231) Sangría
  24-----------
  25
  26Las tabulaciones tienen 8 caracteres y, por lo tanto, las sangrías también
  27tienen 8 caracteres. Hay movimientos heréticos que intentan hacer sangría
  28de 4 (¡o incluso 2!) caracteres de longitud, y eso es similar a tratar de
  29definir el valor de PI como 3.
  30
  31Justificación: La idea detrás de la sangría es definir claramente dónde
  32comienza y termina un bloque de control. Especialmente, cuando ha estado
  33buscando en su pantalla durante 20 horas seguidas, le resultará mucho más
  34fácil ver cómo funciona la sangría si tiene sangrías grandes.
  35
  36Bueno, algunas personas dirán que tener sangrías de 8 caracteres hace que
  37el código se mueva demasiado a la derecha y dificulta la lectura en una
  38pantalla de terminal de 80 caracteres. La respuesta a eso es que si
  39necesita más de 3 niveles de sangría, está en apuros de todos modos y
  40debería arreglar su programa.
  41
  42En resumen, las sangrías de 8 caracteres facilitan la lectura y tienen la
  43ventaja añadida de advertirle cuando está anidando sus funciones demasiado
  44profundo. Preste atención a esa advertencia.
  45
  46La forma preferida de facilitar múltiples niveles de sangría en una
  47declaración de switch es para alinear el ``switch`` y sus etiquetas
  48``case`` subordinadas en la misma columna, en lugar de hacer ``doble
  49sangrí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
  70No ponga varias declaraciones en una sola línea a menos que tenga algo que
  71ocultar:
  72
  73.. code-block:: c
  74
  75	if (condición) haz_esto;
  76	  haz_otra_cosa;
  77
  78No use comas para evitar el uso de llaves:
  79
  80.. code-block:: c
  81
  82	if (condición)
  83		haz_esto(), haz_eso();
  84
  85Siempre use llaves para múltiples declaraciones:
  86
  87.. code-block:: c
  88
  89	if (condición) {
  90		haz_esto();
  91		haz_eso();
  92	}
  93
  94Tampoco ponga varias asignaciones en una sola línea. El estilo de código
  95del kernel es súper simple. Evite las expresiones engañosas.
  96
  97
  98Aparte de los comentarios, la documentación y excepto en Kconfig, los
  99espacios nunca se utilizan para la sangría, y el ejemplo anterior se rompe
 100deliberadamente.
 101
 102Consiga un editor decente y no deje espacios en blanco al final de las
 103líneas.
 104
 1052) Rompiendo líneas y strings largos
 106------------------------------------
 107
 108El estilo de código tiene todo que ver con la legibilidad y la
 109mantenibilidad usando herramientas disponibles comúnmente.
 110
 111El límite preferido en la longitud de una sola línea es de 80 columnas.
 112
 113Las declaraciones de más de 80 columnas deben dividirse en partes, a menos
 114que exceder las 80 columnas aumente significativamente la legibilidad y no
 115oculte información.
 116
 117Los descendientes siempre son sustancialmente más cortos que el padre y
 118se colocan sustancialmente a la derecha. Un estilo muy usado es alinear
 119descendientes a un paréntesis de función abierto.
 120
 121Estas mismas reglas se aplican a los encabezados de funciones con una larga
 122lista de argumentos.
 123
 124Sin embargo, nunca rompa los strings visibles para el usuario, como los
 125mensajes printk, porque eso rompe la capacidad de grep a estos.
 126
 127
 1283) Colocación de llaves y espacios
 129----------------------------------
 130
 131El otro problema que siempre surge en el estilo C es la colocación de
 132llaves. A diferencia del tamaño de la sangría, existen pocas razones
 133técnicas para elegir una estrategia de ubicación sobre la otra, pero la
 134forma preferida, como mostraron los profetas Kernighan y Ritchie, es poner
 135la llave de apertura en la línea, y colocar la llave de cierre primero,
 136así:
 137
 138.. code-block:: c
 139
 140	if (x es verdad) {
 141		hacemos y
 142	}
 143
 144Esto 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
 160Sin embargo, hay un caso especial, a saber, las funciones: tienen la llave
 161de 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
 170Gente hereje de todo el mundo ha afirmado que esta inconsistencia es...
 171bueno... 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
 173especiales de todos modos (no puede anidarlas en C).
 174
 175Tenga 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
 177declaración, es decir, un ``while`` en una sentencia do o un ``else`` en
 178una sentencia if, como en:
 179
 180.. code-block:: c
 181
 182	do {
 183		cuerpo del bucle do
 184	} while (condition);
 185
 186y
 187
 188.. code-block:: c
 189
 190	if (x == y) {
 191		..
 192	} else if (x > y) {
 193		...
 194	} else {
 195		....
 196	}
 197
 198Justificación: K&R.
 199
 200Además, tenga en cuenta que esta colocación de llaves también minimiza el
 201número de líneas vacías (o casi vacías), sin pérdida de legibilidad. Así,
 202como el suministro de nuevas líneas en su pantalla no es un recurso
 203renovable (piense en pantallas de terminal de 25 líneas), tienes más líneas
 204vacías para poner comentarios.
 205
 206No use llaves innecesariamente donde una sola declaración sea suficiente.
 207
 208.. code-block:: c
 209
 210	if (condition)
 211		accion();
 212
 213y
 214
 215.. code-block:: none
 216
 217	if (condición)
 218		haz_esto();
 219	else
 220		haz_eso();
 221
 222Esto no aplica si solo una rama de una declaración condicional es una sola
 223declaració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
 234Ademá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
 2433.1) Espacios
 244*************
 245
 246El estilo del kernel Linux para el uso de espacios depende (principalmente)
 247del uso de función versus uso de palabra clave. Utilice un espacio después
 248de (la mayoría de) las palabras clave. Las excepciones notables son sizeof,
 249typeof, alignof y __attribute__, que parecen algo así como funciones (y
 250generalmente se usan con paréntesis en Linux, aunque no son requeridos en
 251el idioma, como en: ``sizeof info`` después de que ``struct fileinfo info;``
 252se declare).
 253
 254Así que use un espacio después de estas palabras clave::
 255
 256	if, switch, case, for, do, while
 257
 258pero no con sizeof, typeof, alignof, o __attribute__. Por ejemplo,
 259
 260.. code-block:: c
 261
 262
 263	s = sizeof(struct file);
 264
 265No agregue espacios alrededor (dentro) de expresiones entre paréntesis.
 266Este ejemplo es **malo**:
 267
 268.. code-block:: c
 269
 270
 271	s = sizeof( struct file );
 272
 273Al declarar datos de puntero o una función que devuelve un tipo de puntero,
 274el uso preferido de ``*`` es adyacente al nombre del dato o nombre de la
 275funció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
 284Use un espacio alrededor (a cada lado de) la mayoría de los operadores
 285binarios y ternarios, como cualquiera de estos::
 286
 287	=  +  -  <  >  *  /  %  |  &  ^  <=  >=  ==  !=  ?  :
 288
 289pero sin espacio después de los operadores unarios::
 290
 291	&  *  +  -  ~  !  sizeof  typeof  alignof  __attribute__  defined
 292
 293sin espacio antes de los operadores unarios de incremento y decremento del
 294sufijo::
 295
 296	++  --
 297
 298y sin espacio alrededor de los operadores de miembros de estructura ``.`` y
 299``->``.
 300
 301No 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
 303nuevas líneas como sea apropiado, para que pueda comenzar a escribir la
 304siguiente línea de código de inmediato. Sin embargo, algunos de estos
 305editores no eliminan los espacios en blanco si finalmente no termina
 306poniendo una línea de código allí, como si dejara una línea en blanco. Como
 307resultado, termina con líneas que contienen espacios en blanco al final.
 308
 309Git le advertirá sobre los parches que introducen espacios en blanco al
 310final y puede, opcionalmente, eliminar los espacios en blanco finales por
 311usted; sin embargo, si se aplica una serie de parches, esto puede hacer que
 312los parches posteriores de la serie fallen al cambiar sus líneas de
 313contexto.
 314
 315
 3164) Nomenclatura
 317---------------
 318
 319C es un lenguaje espartano, y sus convenciones de nomenclatura deberían
 320seguir su ejemplo. A diferencia de los programadores de Modula-2 y Pascal,
 321los programadores de C no usan nombres cuquis como
 322EstaVariableEsUnContadorTemporal. Un programador de C lo llamaría
 323variable ``tmp``, que es mucho más fácil de escribir, y no es mas difícil
 324de comprender.
 325
 326SIN EMBARGO, mientras que los nombres de mayúsculas y minúsculas están mal
 327vistos, los nombres descriptivos para las variables globales son
 328imprescindibles. Llamar a una función global ``foo`` es un delito.
 329
 330Una variable GLOBAL (para usar solo si **realmente** las necesita) necesita
 331tener un nombre descriptivo, al igual que las funciones globales. Si tiene
 332una 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
 335Codificar el tipo de una función en el nombre (lo llamado notación húngara)
 336es estúpido: el compilador conoce los tipos de todos modos y puede
 337verificar estos, y solo confunde al programador.
 338
 339Los nombres de las variables LOCALES deben ser breves y directos. Si usted
 340tiene algún contador aleatorio de tipo entero, probablemente debería
 341llamarse ``i``. Llamarlo ``loop_counter`` no es productivo, si no hay
 342posibilidad de ser mal entendido. De manera similar, ``tmp`` puede ser casi
 343cualquier tipo de variable que se utiliza para contener un valor temporal.
 344
 345Si tiene miedo de mezclar los nombres de las variables locales, tiene otro
 346problema, que se denomina síndrome de
 347función-crecimiento-desequilibrio-de-hormona. Vea el capítulo 6 (Funciones).
 348
 349Para 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
 353Los 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
 360Los reemplazos recomendados para 'backlist / whitelist' son:
 361    'denylist / allowlist'
 362    'blocklist / passlist'
 363
 364Las excepciones para la introducción de nuevos usos son mantener en espacio
 365de usuario una ABI/API, o al actualizar la especificación del código de un
 366hardware o protocolo existente (a partir de 2020) que requiere esos
 367términos. Para nuevas especificaciones, traduzca el uso de la terminología
 368de la especificación al estándar de código del kernel donde sea posible.
 369
 3705) Typedefs
 371-----------
 372
 373Por favor no use cosas como ``vps_t``.
 374Es un **error** usar typedef para estructuras y punteros. cuando ve un
 375
 376.. code-block:: c
 377
 378
 379	vps_t a;
 380
 381en el código fuente, ¿qué significa?
 382En cambio, si dice
 383
 384.. code-block:: c
 385
 386	struct virtual_container *a;
 387
 388puede decir qué es ``a`` en realidad.
 389
 390Mucha 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
 448Tal vez también haya otros casos, pero la regla básicamente debería ser
 449NUNCA JAMÁS use un typedef a menos que pueda coincidir claramente con una
 450de estas reglas.
 451
 452En general, un puntero o una estructura que tiene elementos que pueden
 453ser razonablemente accedidos directamente, **nunca** deben ser un typedef.
 454
 4556) Funciones
 456------------
 457
 458Las funciones deben ser cortas y dulces, y hacer una sola cosa. Deberían
 459caber en una o dos pantallas de texto (el tamaño de pantalla ISO/ANSI es
 46080x24, como todos sabemos), y hacer una cosa y hacerla bien.
 461
 462La longitud máxima de una función es inversamente proporcional a la
 463complejidad y el nivel de sangría de esa función. Entonces, si tiene una
 464función conceptualmente simple que es solo una larga (pero simple)
 465declaración de case, donde tiene que hacer un montón de pequeñas cosas para
 466un montón de diferentes casos, está bien tener una función más larga.
 467
 468Sin embargo, si tiene una función compleja y sospecha que un estudiante de
 469primer año de secundaria menos que dotado podría no comprender de qué se
 470trata la función, debe adherirse a los límites máximos tanto más de
 471cerca. Use funciones auxiliares con nombres descriptivos (puede pedirle al
 472compilador que los alinee si cree que es crítico para el rendimiento, y
 473probablemente lo hará mejor de lo que usted hubiera hecho).
 474
 475Otra medida de la función es el número de variables locales. Estas no deben
 476exceder de 5 a 10, o está haciendo algo mal. Piense de nuevo en la función
 477y divida en partes más pequeñas. Un cerebro humano puede generalmente
 478realiza un seguimiento de aproximadamente 7 cosas diferentes, cualquier
 479elemento más y se confunde. Usted sabe que es brillante, pero tal vez le
 480gustaría entender lo que hizo dentro de 2 semanas.
 481
 482En los archivos fuente, separe las funciones con una línea en blanco. Si la
 483función es exportada, la macro **EXPORT** debería ponerse inmediatamente
 484despué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
 4946.1) Prototipos de funciones
 495****************************
 496
 497En los prototipos de funciones, incluya nombres de parámetros con sus tipos
 498de datos. Aunque esto no es requerido por el lenguaje C, se prefiere en
 499Linux porque es una forma sencilla de añadir información valiosa para el
 500lector.
 501
 502No utilice la palabra clave ``extern`` con declaraciones de función ya que
 503esto hace las líneas más largas y no es estrictamente necesario.
 504
 505Al escribir prototipos de funciones, mantenga el `orden de los elementos regular
 506<https://lore.kernel.org/mm-commits/CAHk-=wiOCLRny5aifWNhr621kYrJwhfURsa0vFPeUEm8mF0ufg@mail.gmail.com/>`_.
 507Por 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
 512El 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
 528Tenga en cuenta que para una **definición** de función (es decir, el cuerpo
 529real de la función), el compilador no permite atributos de parámetros de
 530función después de parámetros de la función. En estos casos, deberán ir
 531tras los atributos de clase (por ejemplo, tenga en cuenta el cambio de
 532posición de ``__printf(4, 5)`` a continuación, en comparación con el
 533ejemplo 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
 5417) Salida centralizada de funciones
 542-----------------------------------
 543
 544Aunque desaprobado por algunas personas, el equivalente de la instrucción
 545goto es utilizado con frecuencia por los compiladores, en forma de
 546instrucción de salto incondicional.
 547
 548La declaración goto es útil cuando una función sale desde múltiples
 549ubicaciones y se deben realizar algunos trabajos comunes, como la limpieza.
 550Si no se necesita limpieza, entonces simplemente haga return directamente.
 551
 552Elija nombres de etiquetas que digan qué hace el goto o por qué existe el
 553goto. Un ejemplo de un buen nombre podría ser ``out_free_buffer:``
 554(``salida_liberar_buffer``) si al irse libera ``buffer``. Evite usar
 555nombres GW-BASIC como ``err1:`` y ``err2:``, ya que tendría que volver a
 556numerarlos si alguna vez agrega o elimina rutas de salida, y hacen que sea
 557difícil de verificar que sean correctos, de todos modos.
 558
 559La 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
 591Un tipo común de error a tener en cuenta es "un error de error" que es algo
 592así:
 593
 594.. code-block:: c
 595
 596	err:
 597		kfree(foo->bar);
 598		kfree(foo);
 599		return ret;
 600
 601El error en este código es que en algunas rutas de salida, ``foo`` es NULL.
 602Normalmente 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
 613Idealmente, debería simular errores para probar todas las rutas de salida.
 614
 615
 6168) Comentarios
 617--------------
 618
 619Los comentarios son buenos, pero también existe el peligro de comentar
 620demasiado. NUNCA trate de explicar CÓMO funciona su código en un
 621comentario: 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
 623escrito.
 624
 625Generalmente, desea que sus comentarios digan QUÉ hace su código, no CÓMO.
 626Además, trate de evitar poner comentarios dentro del cuerpo de una función:
 627si la función es tan compleja que necesita comentar por separado partes de
 628esta, probablemente debería volver al capítulo 6 una temporada. Puede
 629hacer pequeños comentarios para notar o advertir sobre algo particularmente
 630inteligente (o feo), pero trate de evitar el exceso. En su lugar, ponga los
 631comentarios al principio de la función, diga a la gente lo que hace y
 632posiblemente POR QUÉ hace esto.
 633
 634Al comentar las funciones de la API del kernel, utilice el formato
 635kernel-doc. Consulte los archivos en :ref:`Documentation/doc-guide/ <doc_guide>`
 636y ``scripts/kernel-doc`` para más detalles.
 637
 638El 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
 651Para archivos en net/ y drivers/net/, el estilo preferido para comentarios
 652largos (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
 663También es importante comentar los datos, ya sean tipos básicos o
 664derivados. Para este fin, use solo una declaración de datos por línea (sin
 665comas para múltiples declaraciones de datos). Esto le deja espacio para un
 666pequeño comentario sobre cada elemento, explicando su uso.
 667
 6689) Has hecho un desastre
 669---------------------------
 670
 671Está bien, todos lo hacemos. Probablemente un antiguo usuario de Unix le
 672haya dicho que ``GNU emacs`` formatea automáticamente las fuentes C por
 673usted, y ha notado que sí, lo hace, pero los por defecto que tiene son
 674menos que deseables (de hecho, son peores que los aleatorios) escribiendo -
 675un número infinito de monos escribiendo en GNU emacs nunca harán un buen
 676programa).
 677
 678Por lo tanto, puede deshacerse de GNU emacs o cambiarlo y usar valores más
 679sanos. 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
 731Esto hará que emacs funcione mejor con el estilo de código del kernel para
 732C en archivos bajo ``~/src/linux-trees``.
 733
 734Pero incluso si no logra que emacs realice un formateo correcto, no todo
 735está perdido: use ``indent``.
 736
 737Ahora bien, de nuevo, la sangría de GNU tiene la misma configuración de
 738muerte cerebral que GNU emacs tiene, por lo que necesita darle algunas
 739opciones de línea de comando. Sin embargo, eso no es tan malo, porque
 740incluso los creadores de GNU indent reconocen la autoridad de K&R (la gente
 741de GNU no es mala, solo están gravemente equivocados en este asunto), por
 742lo 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
 744con ese estilo.
 745
 746``indent`` tiene muchas opciones, y especialmente cuando se trata de
 747comentar reformateos, es posible que desee echar un vistazo a la página del
 748manual. Pero recuerde: ``indent`` no es la solución para una mala
 749programación.
 750
 751Tenga en cuenta que también puede usar la herramienta ``clang-format`` para
 752ayudarlo con estas reglas, para volver a formatear rápidamente partes de su
 753código automáticamente, y revisar archivos completos para detectar errores
 754de estilo del código, errores tipográficos y posibles mejoras. También es
 755útil para ordenar ``#includes``, para alinear variables/macros, para
 756redistribuir texto y otras tareas similares. Vea el archivo
 757:ref:`Documentation/dev-tools/clang-format.rst <clangformat>` para más
 758detalles.
 759
 76010) Archivos de configuración de Kconfig
 761----------------------------------------
 762
 763Para todos los archivos de configuración de Kconfig* en todo el árbol
 764fuente, 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
 766ayuda 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
 777Características seriamente peligrosas (como soporte de escritura para
 778ciertos filesystems) deben anunciar esto de forma destacada en su cadena de
 779solicitud::
 780
 781  config ADFS_FS_RW
 782	bool "ADFS write support (DANGEROUS)"
 783	depends on ADFS_FS
 784	...
 785
 786Para obtener la documentación completa sobre los archivos de configuración,
 787consulte el archivo Documentation/kbuild/kconfig-language.rst.
 788
 789
 79011) Estructuras de datos
 791------------------------
 792
 793Las estructuras de datos que tienen visibilidad fuera del contexto de un
 794solo subproceso en el que son creadas y destruidas, siempre debe tener
 795contadores 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
 797que significa que absolutamente **tiene** para hacer referencia y contar
 798todos sus usos.
 799
 800El conteo de referencias significa que puede evitar el bloqueo y permite
 801que múltiples usuarios tengan acceso a la estructura de datos en paralelo -
 802y no tengan que preocuparse de que la estructura, de repente, desaparezca
 803debajo de su control, solo porque durmieron o hicieron otra cosa por un
 804tiempo.
 805
 806Tenga en cuenta que el bloqueo **no** reemplaza el recuento de referencia.
 807El bloqueo se utiliza para mantener la coherencia de las estructuras de
 808datos, mientras que la referencia y contar es una técnica de gestión de
 809memoria. Por lo general, ambos son necesarios, y no deben confundirse entre
 810sí.
 811
 812De hecho, muchas estructuras de datos pueden tener dos niveles de conteo de
 813referencias, cuando hay usuarios de diferentes ``clases``. El conteo de
 814subclases cuenta el número de usuarios de la subclase y disminuye el conteo
 815global solo una vez, cuando el recuento de subclases llega a cero.
 816
 817Se pueden encontrar ejemplos de este tipo de ``recuento de referencias de
 818niveles múltiples`` en la gestión de memoria (``struct mm_struct``:
 819mm_users y mm_count), y en código del sistema de archivos
 820(``struct super_block``: s_count y s_active).
 821
 822Recuerde: si otro hilo puede encontrar su estructura de datos y usted no
 823tiene un recuento de referencias, es casi seguro que tiene un error.
 824
 82512) Macros, Enums y RTL
 826------------------------
 827
 828Los 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
 835Se prefieren los enums cuando se definen varias constantes relacionadas.
 836
 837Se aprecian los nombres de macro en MAYÚSCULAS, pero las macros que se
 838asemejan a funciones puede ser nombradas en minúscula.
 839
 840Generalmente, las funciones en línea son preferibles a las macros que se
 841asemejan a funciones.
 842
 843Las 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
 853Cosas a evitar al usar macros:
 854
 8551) 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
 865es una **muy** mala idea. Parece una llamada de función pero sale de la
 866función de ``llamada``; no rompa los analizadores internos de aquellos que
 867leerán el código.
 868
 8692) 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
 875puede parecer algo bueno, pero es confuso como el infierno cuando uno lee
 876el código, y es propenso a romperse por cambios aparentemente inocentes.
 877
 8783) macros con argumentos que se usan como valores l: FOO(x) = y; le van
 879a morder si alguien, por ejemplo, convierte FOO en una función en línea.
 880
 8814) olvidarse de la precedencia: las macros que definen constantes usando
 882expresiones deben encerrar la expresión entre paréntesis. Tenga cuidado con
 883problemas similares con macros usando parámetros.
 884
 885.. code-block:: c
 886
 887	#define CONSTANTE 0x4000
 888	#define CONSTEXP (CONSTANTE | 3)
 889
 8905) colisiones de espacio de nombres ("namespace") al definir variables
 891locales 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
 902ret es un nombre común para una variable local -es menos probable que
 903__foo_ret colisione (coincida) con una variable existente.
 904
 905El manual de cpp trata las macros de forma exhaustiva. El manual interno de
 906gcc también cubre RTL, que se usa frecuentemente con lenguaje ensamblador
 907en el kernel.
 908
 90913) Imprimir mensajes del kernel
 910--------------------------------
 911
 912A los desarrolladores del kernel les gusta ser vistos como alfabetizados.
 913Cuide la ortografía de los mensajes del kernel para causar una buena
 914impresión. No utilice contracciones incorrectas como ``dont``; use
 915``do not`` o ``don't`` en su lugar. Haga sus mensajes concisos, claros e
 916inequívocos.
 917
 918Los mensajes del kernel no tienen que terminar con un punto.
 919
 920Imprimir números entre paréntesis (%d) no agrega valor y debe evitarse.
 921
 922Hay varias modelos de macros de diagnóstico de driver en <linux/dev_printk.h>
 923que debe usar para asegurarse de que los mensajes coincidan con el
 924dispositivo correcto y driver, y están etiquetados con el nivel correcto:
 925dev_err(), dev_warn(), dev_info(), y así sucesivamente. Para mensajes que
 926no están asociados con un dispositivo particular, <linux/printk.h> define
 927pr_notice(), pr_info(), pr_warn(), pr_err(), etc.
 928
 929Crear buenos mensajes de depuración puede ser todo un desafío; y una vez
 930los tiene, pueden ser de gran ayuda para la resolución remota de problemas.
 931Sin embargo, la impresión de mensajes de depuración se maneja de manera
 932diferente a la impresión de otros mensajes que no son de depuración.
 933Mientras que las otras funciones pr_XXX() se imprimen incondicionalmente,
 934pr_debug() no lo hace; se compila fuera por defecto, a menos que DEBUG sea
 935definido o se establezca CONFIG_DYNAMIC_DEBUG. Eso es cierto para dev_dbg()
 936también, y una convención relacionada usa VERBOSE_DEBUG para agregar
 937mensajes dev_vdbg() a los ya habilitados por DEBUG.
 938
 939Muchos subsistemas tienen opciones de depuración de Kconfig para activar
 940-DDEBUG en el Makefile correspondiente; en otros casos, los archivos
 941usan #define DEBUG. Y cuando un mensaje de depuración debe imprimirse
 942incondicionalmente, por ejemplo si es ya dentro de una sección #ifdef
 943relacionada con la depuración, printk(KERN_DEBUG ...) puede ser usado.
 944
 94514) Reservando memoria
 946----------------------
 947
 948El kernel proporciona los siguientes asignadores de memoria de propósito
 949general: kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc() y
 950vzalloc(). Consulte la documentación de la API para obtener más información.
 951a cerca de ellos. :ref:`Documentation/core-api/memory-allocation.rst
 952<memory_allocation>`
 953
 954La 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
 960La forma alternativa donde se deletrea el nombre de la estructura perjudica
 961la legibilidad, y presenta una oportunidad para un error cuando se cambia
 962el tipo de variable de puntero, pero el tamaño correspondiente de eso que
 963se pasa a un asignador de memoria no.
 964
 965Convertir el valor devuelto, que es un puntero vacío, es redundante. La
 966conversión desde el puntero vacío a cualquier otro tipo de puntero está
 967garantizado por la programación en idioma C.
 968
 969La forma preferida para asignar una matriz es la siguiente:
 970
 971.. code-block:: c
 972
 973	p = kmalloc_array(n, sizeof(...), ...);
 974
 975La forma preferida para asignar una matriz a cero es la siguiente:
 976
 977.. code-block:: c
 978
 979	p = kcalloc(n, sizeof(...), ...);
 980
 981Ambos casos verifican el desbordamiento en el tamaño de asignación n *
 982sizeof (...), y devuelven NULL si esto ocurrió.
 983
 984Todas 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
 986que no sirve de nada emitir un mensaje de fallo adicional cuando se
 987devuelva NULL.
 988
 98915) La enfermedad de inline
 990----------------------------
 991
 992Parece haber una común percepción errónea de que gcc tiene una magica
 993opción "hazme más rápido" de aceleración, llamada ``inline`` (en línea).
 994Mientras que el uso de inlines puede ser apropiado (por ejemplo, como un
 995medio para reemplazar macros, consulte el Capítulo 12), muy a menudo no lo
 996es. El uso abundante de la palabra clave inline conduce a una mayor kernel,
 997que a su vez ralentiza el sistema en su conjunto, debido a una mayor huella
 998de icache para la CPU, y sencillamente porque hay menos memoria disponible
 999para el pagecache. Solo piense en esto; un fallo en la memoria caché de la
1000página provoca una búsqueda de disco, que tarda fácilmente 5 milisegundos.
1001Hay MUCHOS ciclos de CPU que puede entrar en estos 5 milisegundos.
1002
1003Una razonable regla general es no poner funciones inline que tengan más de
10043 líneas de código en ellas. Una excepción a esta regla son los casos en
1005que se sabe que un parámetro es una constante en tiempo de compilación, y
1006como resultado de esto, usted *sabe*, el compilador podrá optimizar la
1007mayor parte de su función en tiempo de compilación. Para un buen ejemplo de
1008este último caso, véase la función en línea kmalloc().
1009
1010A menudo, la gente argumenta que agregar funciones en línea que son
1011estáticas y se usan solo una vez, es siempre una victoria ya que no hay
1012perdida de espacio. Mientras esto es técnicamente correcto, gcc es capaz de
1013incorporarlos automáticamente sin ayuda, y esta el problema de
1014mantenimiento de eliminar el inline, cuando un segundo usuario supera el
1015valor potencial de la pista que le dice a gcc que haga algo que habría
1016hecho de todos modos.
1017
101816) Valores devueltos por función y sus nombres
1019-----------------------------------------------
1020
1021Las funciones pueden devolver valores de muchos tipos diferentes, y uno de
1022lo más común es un valor que indica si la función tuvo éxito o ha fallado.
1023Dicho 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
1025de cero = éxito).
1026
1027La mezcla de estos dos tipos de representaciones es una fuente fértil de
1028errores difíciles de encontrar. Si el lenguaje C incluyera una fuerte
1029distinción entre enteros y booleanos, el compilador encontraría estos
1030errores por nosotros... pero no lo hace. Para ayudar a prevenir tales
1031errores, 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
1037Por ejemplo, ``agregar trabajo`` es un comando, y la función
1038agregar_trabajo() devuelve 0 en caso de éxito o -EBUSY en caso de fracaso.
1039De la misma manera, ``dispositivo PCI presente`` es un predicado, y la
1040función pci_dev_present() devuelve 1 si tiene éxito en encontrar un
1041dispositivo coincidente o 0 si no es así.
1042
1043Todas las funciones EXPORTed (exportadas) deben respetar esta convención,
1044al igual que todas las funciones publicas. Las funciones privadas
1045(estáticas) no lo necesitan, pero es recomendado que lo hagan.
1046
1047Las funciones cuyo valor devuelto es el resultado real de un cálculo, en
1048lugar de una indicación de si el cómputo tuvo éxito, no están sujetas a
1049esta regla. Generalmente indican fallo al devolver valores fuera del rango
1050de resultados. Los ejemplos típicos serían funciones que devuelven
1051punteros; estos usan NULL o el mecanismo ERR_PTR para informar de fallos.
1052
105317) Usando bool
1054----------------
1055
1056El tipo bool del kernel Linux es un alias para el tipo C99 _Bool. Los
1057valores booleanos pueden solo evaluar a 0 o 1, y la conversión implícita o
1058explícita a bool convierte automáticamente el valor en verdadero o falso.
1059Cuando se utilizan tipos booleanos,
1060!! no se necesita construcción, lo que elimina una clase de errores.
1061
1062Cuando se trabaja con valores booleanos, se deben usar las definiciones
1063verdadera y falsa, en lugar de 1 y 0.
1064
1065Los tipos de devolución de función bool y las variables de pila siempre
1066se pueden usar cuando esto sea adecuado. Se recomienda el uso de bool para
1067mejorar la legibilidad y, a menudo, es una mejor opción que 'int' para
1068almacenar valores booleanos.
1069
1070No use bool si el diseño de la línea de caché o el tamaño del valor son
1071importantes, ya que su tamaño y la alineación varía según la arquitectura
1072compilada. Las estructuras que son optimizadas para la alineación y el
1073tamaño no debe usar bool.
1074
1075Si una estructura tiene muchos valores verdadero/falso, considere
1076consolidarlos en un bitfield con miembros de 1 bit, o usando un tipo de
1077ancho fijo apropiado, como u8.
1078
1079De manera similar, para los argumentos de función, se pueden consolidar
1080muchos 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
1082sitios de llamada tienen constantes desnudas de tipo verdaderas/falsas.
1083
1084De lo contrario, el uso limitado de bool en estructuras y argumentos puede
1085mejorar la legibilidad.
1086
108718) No reinvente las macros del kernel
1088---------------------------------------
1089
1090El archivo de cabecera include/linux/kernel.h contiene una serie de macros
1091que debe usar, en lugar de programar explícitamente alguna variante de
1092estos por usted mismo. Por ejemplo, si necesita calcular la longitud de una
1093matriz, aproveche la macro
1094
1095.. code-block:: c
1096
1097	#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
1098
1099De manera similar, si necesita calcular el tamaño de algún miembro de la
1100estructura, use
1101
1102.. code-block:: c
1103
1104	#define sizeof_field(t, f) (sizeof(((t*)0)->f))
1105
1106También hay macros min() y max() que realizan una verificación estricta de
1107tipos si lo necesita. Siéntase libre de leer detenidamente ese archivo de
1108encabezado para ver qué más ya está definido y que no debe reproducir en su
1109código.
1110
111119) Editores modeline y otros desastres
1112---------------------------------------
1113
1114Algunos editores pueden interpretar la información de configuración
1115incrustada en los archivos fuente, indicado con marcadores especiales. Por
1116ejemplo, emacs interpreta las líneas marcadas como esto:
1117
1118.. code-block:: c
1119
1120	-*- mode: c -*-
1121
1122O así:
1123
1124.. code-block:: c
1125
1126	/*
1127	Local Variables:
1128	compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
1129	End:
1130	*/
1131
1132Vim interpreta los marcadores que se ven así:
1133
1134.. code-block:: c
1135
1136	/* vim:set sw=8 noet */
1137
1138No incluya ninguno de estos en los archivos fuente. La gente tiene sus
1139propias configuraciones del editor, y sus archivos de origen no deben
1140anularlos. Esto incluye marcadores para sangría y configuración de modo.
1141La gente puede usar su propio modo personalizado, o puede tener algún otro
1142método mágico para que la sangría funcione correctamente.
1143
1144
114520) Ensamblador inline
1146-----------------------
1147
1148En el código específico de arquitectura, es posible que deba usar
1149ensamblador en línea para interactuar con funcionalidades de CPU o
1150plataforma. No dude en hacerlo cuando sea necesario. Sin embargo, no use
1151ensamblador en línea de forma gratuita cuando C puede hacer el trabajo.
1152Puede y debe empujar el hardware desde C cuando sea posible.
1153
1154Considere escribir funciones auxiliares simples que envuelvan bits comunes
1155de ensamblador, en lugar de escribirlos repetidamente con ligeras
1156variaciones. Recuerde que el ensamblador en línea puede usar parámetros C.
1157
1158Las funciones de ensamblador grandes y no triviales deben ir en archivos .S,
1159con su correspondientes prototipos de C definidos en archivos de encabezado
1160en C. Los prototipos de C para el ensamblador deben usar ``asmlinkage``.
1161
1162Es posible que deba marcar su declaración asm como volátil, para evitar que
1163GCC la elimine si GCC no nota ningún efecto secundario. No siempre es
1164necesario hacerlo, sin embargo, y hacerlo innecesariamente puede limitar la
1165optimización.
1166
1167Al escribir una sola declaración de ensamblador en línea que contiene
1168múltiples instrucciones, ponga cada instrucción en una línea separada en
1169una string separada, y termine cada string excepto la última con ``\n\t``
1170para indentar correctamente la siguiente instrucción en la salida en
1171ensamblador:
1172
1173.. code-block:: c
1174
1175	asm ("magic %reg1, #42\n\t"
1176	     "more_magic %reg2, %reg3"
1177	     : /* outputs */ : /* inputs */ : /* clobbers */);
1178
117921) Compilación condicional
1180---------------------------
1181
1182Siempre 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
1184la lógica más difícil de seguir. En cambio, use dichos condicionales en un
1185archivo de encabezado que defina funciones para usar en esos archivos .c,
1186proporcionando versiones de código auxiliar sin operación en el caso #else,
1187y luego llame a estas funciones incondicionalmente desde archivos .c. El
1188compilador evitará generar cualquier código para las llamadas restantes,
1189produciendo resultados idénticos, pero la lógica es fácil de seguir.
1190
1191Prefiera compilar funciones completas, en lugar de porciones de funciones o
1192porciones de expresiones. En lugar de poner un ifdef en una expresión,
1193divida la totalidad de la expresión con una función de ayuda independiente
1194y aplique el condicional a esa función.
1195
1196Si tiene una función o variable que puede potencialmente quedar sin usar en
1197una configuración en particular, y el compilador advertiría sobre su
1198definición sin usar, marque la definición como __maybe_unused en lugar de
1199envolverla en un preprocesador condicional. (Sin embargo, si una función o
1200variable *siempre* acaba sin ser usada, bórrela.)
1201
1202Dentro del código, cuando sea posible, use la macro IS_ENABLED para
1203convertir un símbolo Kconfig en una expresión booleana de C, y utilícelo en
1204un condicional de C normal:
1205
1206.. code-block:: c
1207
1208	if (IS_ENABLED(CONFIG_SOMETHING)) {
1209		...
1210	}
1211
1212El compilador "doblará"" constantemente el condicional e incluirá o
1213excluirá el bloque de código al igual que con un #ifdef, por lo que esto no
1214agregará ningún tiempo de gastos generales en ejecución. Sin embargo, este
1215enfoque todavía permite que el compilador de C vea el código dentro del
1216bloque, y verifique que sea correcto (sintaxis, tipos, símbolo, referencias,
1217etc.). Por lo tanto, aún debe usar un #ifdef si el código dentro del bloque
1218hace referencia a símbolos que no existirán si no se cumple la condición.
1219
1220Al final de cualquier bloque #if o #ifdef no trivial (más de unas pocas
1221líneas), incluya un comentario después de #endif en la misma línea,
1222anotando la expresión condicional utilizada. Por ejemplo:
1223
1224.. code-block:: c
1225
1226	#ifdef CONFIG_SOMETHING
1227	...
1228	#endif /* CONFIG_SOMETHING */
1229
123022) No rompa el kernel
1231-----------------------
1232
1233En general, la decisión de romper el kernel pertenece al usuario, más que
1234al desarrollador del kernel.
1235
1236Evite el panic()
1237****************
1238
1239panic() debe usarse con cuidado y principalmente solo durante el arranque
1240del sistema. panic() es, por ejemplo, aceptable cuando se queda sin memoria
1241durante el arranque y no puede continuar.
1242
1243Use WARN() en lugar de BUG()
1244****************************
1245
1246No agregue código nuevo que use cualquiera de las variantes BUG(), como
1247BUG(), BUG_ON() o VM_BUG_ON(). En su lugar, use una variante WARN*(),
1248preferiblemente WARN_ON_ONCE(), y posiblemente con código de recuperación.
1249El código de recuperación no es requerido si no hay una forma razonable de
1250recuperar, al menos parcialmente.
1251
1252"Soy demasiado perezoso para tener en cuenta los errores" no es una excusa
1253para usar BUG(). Importantes corrupciones internas sin forma de continuar
1254aún pueden usar BUG(), pero necesitan una buena justificación.
1255
1256Use WARN_ON_ONCE() en lugar de WARN() o WARN_ON()
1257*************************************************
1258
1259Generalmente, se prefiere WARN_ON_ONCE() a WARN() o WARN_ON(), porque es
1260común que una condición de advertencia dada, si ocurre, ocurra varias
1261veces. Esto puede llenar el registro del kernel, e incluso puede ralentizar
1262el sistema lo suficiente como para que el registro excesivo se convierta en
1263su propio, adicional problema.
1264
1265No haga WARN a la ligera
1266************************
1267
1268WARN*() está diseñado para situaciones inesperadas que nunca deberían
1269suceder. Las macros WARN*() no deben usarse para nada que se espera que
1270suceda durante un funcionamiento normal. No hay "checkeos" previos o
1271posteriores a la condición, por ejemplo. De nuevo: WARN*() no debe usarse
1272para una condición esperada que vaya a activarse fácilmente, por ejemplo,
1273mediante acciones en el espacio del usuario. pr_warn_once() es una
1274alternativa posible, si necesita notificar al usuario de un problema.
1275
1276No se preocupe sobre panic_on_warn de usuarios
1277**********************************************
1278
1279Algunas palabras más sobre panic_on_warn: Recuerde que ``panic_on_warn`` es
1280una opción disponible del kernel, y que muchos usuarios configuran esta
1281opción. Esta es la razón por la que hay un artículo de "No haga WARN a la
1282ligera", arriba. Sin embargo, la existencia de panic_on_warn de usuarios no
1283es una razón válida para evitar el uso juicioso de WARN*(). Esto se debe a
1284que quien habilita panic_on_warn, explícitamente pidió al kernel que
1285fallara si se dispara un WARN*(), y tales usuarios deben estar preparados
1286para afrontar las consecuencias de un sistema que es algo más probable que
1287se rompa.
1288
1289Use BUILD_BUG_ON() para aserciones en tiempo de compilación
1290***********************************************************
1291
1292El uso de BUILD_BUG_ON() es aceptable y recomendado, porque es una aserción
1293en tiempo de compilación, que no tiene efecto en tiempo de ejecución.
1294
1295Apéndice I) Referencias
1296-----------------------
1297
1298The C Programming Language, Segunda edicion
1299por Brian W. Kernighan and Dennis M. Ritchie.
1300Prentice Hall, Inc., 1988.
1301ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
1302
1303The Practice of Programming
1304por Brian W. Kernighan and Rob Pike.
1305Addison-Wesley, Inc., 1999.
1306ISBN 0-201-61586-X.
1307
1308manuales GCC - en cumplimiento con K&R y este texto - para cpp, gcc,
1309detalles de gcc y sangría, todo disponible en https://www.gnu.org/manual/
1310
1311WG14 es el grupo de trabajo de estandarización internacional de la
1312programació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:
1315http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
~/ Read-only file preview.