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