Mi biblioteca C tiene algunas características opcionales, y al utilizar automake, el usuario puede activarlas y desactivarlas mediante la configuración de indicadores.¿se considera una buena práctica tener condicionales en archivos de encabezado públicos?
Si se desactiva una función, esa función no se compilará.
Sin embargo, mi pregunta es, ¿debería eliminar también el prototipo de función de los encabezados públicos en ese caso?
Parece que no es una buena idea tener prototipos de función para funciones que no están compiladas, pero también no me parece una buena idea tener diferentes cabeceras públicas instaladas dependiendo de la configuración de la biblioteca. (Similar a cómo es mala práctica instalar config.h
en el directorio de encabezados públicos.)
¿Cuál es el mejor enfoque para los encabezados públicos cuando se trata de características opcionales? Si un usuario intenta usar una función deshabilitada, ¿debería aparecer el error en tiempo de compilación o tiempo de enlace? Debe haber una práctica estándar para esta situación. (Yo prefiero para cumplir con los estándares de codificación de GNU si hay varias ideas, pero no sé de la norma GNU sobre este tema.)
I creo que es un buen yo dea no incluir el prototipo si la función no está definida, de modo que el error se encuentre en tiempo de compilación en lugar de tiempo de enlace, pero no conozco ninguna práctica estándar sobre esto. Yo usaría #if. –
@VaughnCato si el prototipo está excluido por una directiva de preprocesador, obtendrá un error de compilación. –
@LuchianGrigore sí, exactamente. –