¡Algunas habilidades prácticas e increíbles en lenguaje C!
Algunas habilidades prácticas e impresionantes en lenguaje C
1. Inicialización especificada
Mucha gente sabe inicializar estáticamente una matriz como esta: int fibs[1={ 1,1,2,3,5}, el estándar C99 en realidad admite una forma más intuitiva y sencilla de inicializar varios datos de recopilación (como estructuras, uniones y matrices).
2. Array
Podemos especificar los elementos del array para su inicialización. Esto es muy útil, especialmente cuando necesitamos mantener actualizado algún mapeo basado en un conjunto de #defines. Ahora, digamos que queremos proporcionar una cadena que describa el error para cada código de error. Para garantizar que la matriz mantenga la última definición, independientemente de cualquier modificación o adición al archivo de encabezado, podemos usar la sintaxis especificada por esta matriz.
De esta manera, se puede asignar suficiente espacio estáticamente y se garantiza que el índice más grande sea legal. Al mismo tiempo, los índices especiales se inicializan con los valores especificados y los índices restantes se inicializan en 0. .
3. Estructuras y Uniones
Es muy útil para inicializar datos con los nombres de campos de estructuras y uniones. Supongamos que definimos: punto de estructura {int x;int y;int z;} Luego, inicializamos el punto de estructura de esta manera: punto de estructura p {.x 3,.y 4,.z 5]; inicializar todos los campos Cuando es 0, este enfoque puede generar fácilmente la estructura en tiempo de compilación sin la necesidad de llamar específicamente a una función de inicialización. Para las uniones, podemos usar el mismo enfoque, excepto que solo inicializamos un campo.
4. Lista de macros
Un método común en C es tener una lista de entidades nombradas, y es necesario crear una función para cada una de ellas y convertir cada una de ellas en An. inicializador y expande sus nombres en diferentes módulos de código. Esto se usa a menudo en el código fuente de entrenamiento de Mozi, que fue cuando aprendí esta técnica.
Por ejemplo, en el proyecto en el que trabajé el verano pasado, teníamos una lista de macros etiquetadas para cada comando. Define una macro FLAG_LIST, que tiene un parámetro llamado parámetro en sí, que es una macro que puede llamar a cada parámetro de la lista.
5. Aserción en tiempo de compilación
Esta es en realidad una función muy "creativa" implementada mediante macros en lenguaje C. A veces, especialmente cuando se programa el kernel, es útil poder realizar afirmaciones verificadas condicionalmente en tiempo de compilación, en lugar de en tiempo de ejecución. Desafortunadamente, el estándar C99 aún no admite ninguna afirmación en tiempo de compilación.
Sin embargo, podemos usar el preprocesamiento para generar código que solo se compilará cuando se cumplan ciertas condiciones (preferiblemente comandos que no realicen funciones reales). Hay varias formas de hacer esto, generalmente creando una matriz o estructura con un tamaño negativo.