¿Advertencia del compilador para la función definida sin prototipo en el alcance?

[Pregunta inspirada en un hilo de comentarios enesta respuesta.]

omo todos saben, desde C99 es un error llamar a una función que no se ha declarado, preferiblemente con un prototipo adecuado.

Pero, yendo más allá de eso, quiero que mi compilador me avise si yodefini una función sin una declaración de prototipo en el alcance, presumiblemente incluida en el mismo archivo de encabezado que están usando los llamantes. (A menos que la función sea estática, en cuyo caso todo esto es discutible).

La razón debería ser obvia: si hay una declaración de prototipo en un encabezado, y está incluida por todas las personas que llaman, pero no está incluida en el archivo donde se define la función, y si la definición real de la función de alguna manera difiere del prototipo externo, entonces todas las comprobaciones de prototipos realizadas en nombre de las personas que llaman no valen nada y, de hecho, son contraproducentes. Hay un error evidente, pero no se garantiza que se detecte en absoluto.

¿Hay compiladores comunes que pueden verificar esto? Intenté tanto gcc como clang con -Wall, y no lo hacen. (Me imagino que la pelusa Gimpel, si todavía está alrededor, haría esto, pero no tengo una copia).

Idealmente, me gustaría que también insista en que el prototipo exista en un archivo de encabezado separado, pero eso es una caldera diferente de peces, por lo que no insisto en ello. (La razón de esta estipulación adicional sería que algunos programadores, acosados por el mensaje de advertencia hipotético, podrían tratar de silenciarlo escribiendo un prototipo externo en la parte superior de la.c archivo que contiene la definición, que, de nuevo, anularía el propósito.)

Respuestas a la pregunta(1)

Su respuesta a la pregunta