Aquí hay una función que calcula la división de dos números. Todas las variables y funciones se declaran como flotantes. Sin embargo, el código siguiente no se compila y el mensaje de error muestra que "%f espera un argumento de tipo doble, pero el argumento tiene tipo int" y "declaración implícita de la función 'div'" y "tipos en conflicto para 'div'".
#include <stdio.h> #include <assert.h> float div(float a, float b); int main() { float a = 5; float b = 8; printf("%f divided by %f is %f \n", a, b, div(a, b)); } float div(float a, float b) { assert(b != 0); return a / b; }El estándar C 2018 analiza la biblioteca estándar en la cláusula 7. C 2018 7.1.3 1 dice:
… Todos los identificadores con enlace externo en cualquiera de las siguientes subcláusulas (incluidas las futuras instrucciones de la biblioteca) y
errnosiempre se reservan para su uso como identificadores con enlace externo.
En una de las subcláusulas siguientes, 7.22.6.2, div se describe como una función y, por lo tanto, como un identificador con enlace externo.
Por lo tanto, está reservado para usarse como el nombre de una rutina de biblioteca estándar, y el estándar C no define el comportamiento de un programa que lo usa para otro propósito.
Renombra tu función.