Red de conocimientos turísticos - Información de alquiler - ¿Cuáles son las especificaciones de programación del lenguaje C de Huawei?

¿Cuáles son las especificaciones de programación del lenguaje C de Huawei?

Principios generales del código

La claridad es lo primero. La claridad es una característica imprescindible de los programas que son fáciles de mantener y fáciles de refactorizar.

La simplicidad es hermosa. La introducción es fácil de entender y fácil de implementar.

Elija un estilo apropiado y manténgalo coherente con el estilo del código fuente.

Archivos de encabezado

El diseño de los archivos de encabezado refleja la mayor parte del diseño del sistema. El diseño irrazonable del archivo de encabezado es la causa principal del tiempo de compilación prolongado.

El archivo de encabezado es adecuado para colocar la declaración de la interfaz, pero no para colocar la implementación.

Los archivos de cabecera deben tener una única responsabilidad.

Los archivos de encabezado deben incluirse en una dirección estable.

Cada archivo .c debe tener un archivo .h con el mismo nombre, que se utiliza para declarar la interfaz que debe exponerse al mundo exterior.

Están prohibidas las dependencias circulares en archivos de encabezado.

No incluya archivos de encabezado no utilizados.

Los archivos de encabezado deben ser independientes.

Escribir protectores internos #include (#definir protección).

Está prohibido definir variables en archivos de cabecera.

Solo puede usar las interfaces proporcionadas por otros C al incluir archivos de encabezado. Está prohibido usar interfaces de funciones externas y variables a través de extern en C.

Está prohibido incluir archivos de cabecera en "C" externa.

Función

La esencia del diseño de funciones: escribir funciones limpias y organizar el código de manera efectiva.

Una función sólo completa una función.

El código repetitivo debe destilarse en funciones siempre que sea posible.

Evite funciones demasiado largas y no agregue más de 50 líneas de funciones.

Evite que los bloques de código de funciones se anidan demasiado profundamente. Los bloques de código de nuevas funciones no deben anidarse en más de 4 niveles.

Las funciones reentrantes deben evitar el uso de variables compartidas; si es necesario utilizarlas, deben protegerse mediante exclusión mutua.

Si la persona que llama o la función de interfaz es responsable de verificar la legalidad de los parámetros debe estipularse de manera uniforme dentro del módulo del equipo del proyecto. El valor predeterminado es responsabilidad de la persona que llama.

Los códigos de retorno de error de las funciones deben procesarse por completo.

Diseñe una función con un alto abanico de entrada y un abanico de salida razonable (menos de 7). Fan-out se refiere a la cantidad de llamadas a otras funciones. Fan-in se refiere a cuántas funciones superiores lo llaman.

El código abandonado debe eliminarse lo antes posible.

Los parámetros de la función permanecen sin cambios y utilizan calificación constante.

Las funciones deben evitar el uso de variables globales, variables locales estáticas y operaciones de E/S, y deben usarse intensivamente cuando sean inevitables.

Comprueba la validez de todas las entradas no paramétricas de la función, como archivos de datos, variables públicas, etc.

El número de parámetros de la función no debe exceder los 5.

Todas las funciones declaradas y definidas dentro del alcance del archivo fuente deben agregarse con la palabra clave estática a menos que sean visibles externamente.

Identificadores

La denominación de los identificadores debe ser clara, clara y tener un significado claro. Al mismo tiempo, utilice palabras completas o abreviaturas que todos puedan entender básicamente para evitar malentendidos.

El formato de nomenclatura acordado debe mantenerse dentro de los grupos de productos y proyectos.

Intenta evitar números en los nombres a menos que sea lógicamente necesario.

Al refactorizar o modificar parte del código, el estilo debe ser coherente con el código original.

Los comandos de archivo utilizan caracteres en minúscula. Porque los diferentes sistemas manejan los nombres de archivos entre mayúsculas y minúsculas de manera diferente (Windows no distingue entre mayúsculas y minúsculas, pero los sistemas Linux sí).

Las variables globales deben tener el prefijo "g_".

Las variables estáticas deben tener el prefijo "s_".

Está prohibido utilizar variables con nombre de un solo byte, pero se permite definir i, j, k como variables de bucle local.

No se recomienda la nomenclatura húngara.

Para la definición de constantes numéricas o de cadena, se recomienda utilizar todas las letras mayúsculas y guiones bajos entre palabras.

Variables

La estructura tiene una única función, por lo que no diseñes una estructura de datos integral.

No utilizar o utilizar menos variables globales

Evitar que las variables locales tengan el mismo nombre que las variables globales

Se debe prestar atención a los mecanismos utilizados en el proceso de comunicación al orden de los bytes.

Está estrictamente prohibido utilizar variables no inicializadas como rvalues.

Utilice ideas de programación orientadas a interfaces para acceder a datos a través de API.

Minimiza las conversiones predeterminadas innecesarias y las conversiones forzadas de tipos de datos.

Macros y Constantes

Al definir expresiones con macros, utilice paréntesis completos.

Coloque varias expresiones definidas por la macro entre llaves.

Cuando se utilizan macros, no se permite cambiar los parámetros.

No se permite el uso directo de números del diablo.

A menos que sea necesario, se deben utilizar funciones en lugar de macros siempre que sea posible.

Para las constantes, se recomienda utilizar definiciones constantes en lugar de macros.

Calidad

Siempre preste atención a operadores confusos

Debe comprender el método de asignación de memoria del sistema de compilación, especialmente la asignación de memoria de diferentes tipos de variables por las reglas del sistema de compilación, como dónde se asignan las variables locales, dónde se asignan las variables estáticas, etc.

No sólo la interfaz, sino también la implementación.

Prohibir que las operaciones de memoria se salgan de los límites.

Están prohibidas las pérdidas de memoria.

Está prohibida la referencia al espacio de memoria liberado.

A la hora de programar evitar errores del 1.

La instrucción switch debe tener una rama predeterminada.

La memoria asignada en la función debe liberarse antes de que la función salga.

No abuses de las declaraciones goto.

Siempre preste atención a si la expresión se desborda o no.

Eficiencia del programa

Mejorar la eficiencia del código garantizando al mismo tiempo la corrección, simplicidad, mantenibilidad, confiabilidad y capacidad de prueba del sistema de software.

Mejora de la eficiencia mediante la optimización de estructuras de datos y algoritmos del programa.

Mueve el cálculo de condiciones invariantes fuera del bucle.

Para matrices grandes multidimensionales, evite saltar hacia adelante y hacia atrás para acceder a los miembros de la matriz.

Cree bibliotecas de recursos para reducir la sobrecarga de asignación de objetos.

Cambie la "función pequeña" que se llama varias veces a una función en línea o implementación de macro.

Comentarios

Un buen código se explica por sí mismo y se puede leer fácilmente sin comentarios.

El contenido de la anotación debe ser claro y conciso, y el significado debe ser preciso para evitar ambigüedades en la anotación.

Al modificar el código, mantenga todos los comentarios alrededor del código para garantizar la coherencia entre los comentarios y el código. Los comentarios que ya no son útiles se eliminan.

El encabezado del archivo debe estar comentado. Los comentarios deben incluir: declaración de derechos de autor, número de versión, fecha de producción, nombre del autor, número de trabajo, contenido, descripción de la función, relación con otros archivos, registro de modificaciones. etc. El encabezado También debe haber una descripción de la función función en los comentarios del archivo.

Los comentarios en la declaración de la función describen la función, el rendimiento y el uso, incluidos los parámetros de entrada y salida, los valores de retorno de la función, los requisitos de reentrada, etc.; la definición describe la función y los puntos de implementación en detalle, tales como; como un breve resumen de los pasos de implementación, motivos de la implementación, limitaciones de diseño, etc.

Las variables globales deben tener comentarios detallados, incluyendo descripciones de sus funciones, rangos de valores y precauciones al acceder.

Intenta utilizar comentarios en un formato que la herramienta pueda reconocer.

Composición tipográfica y formato

Los bloques de programa están escritos con un estilo sangrado, siendo cada nivel de sangría de 4 espacios.

Se deben agregar líneas en blanco entre bloques de programa relativamente independientes y después de las descripciones de las variables.

Escribe sólo una afirmación por línea.

Agregue espacios a ambos lados de la operación equivalente y agregue espacios entre el carácter del comentario y el contenido.

Compilar

Utilice el nivel de advertencia más alto del compilador, comprenda todas las advertencias y elimínelas modificando el código en lugar de reducir el nivel de advertencia.

En el software del producto, se deben unificar los interruptores de compilación, las opciones de verificación estática y las estrategias de eliminación de alarmas correspondientes.

Prueba

Los módulos están claramente divididos, las interfaces son claras, el acoplamiento es pequeño y hay entradas y salidas claras; de lo contrario, las pruebas unitarias serán difíciles de implementar.

Dentro de un grupo de proyectos o de productos unificado, los registros impresos durante la puesta en servicio deben tener regulaciones unificadas.

Utilice afirmaciones para documentar suposiciones internas.

Las afirmaciones no se pueden utilizar para comprobar si hay errores en tiempo de ejecución.