advertencia: la statement implícita de función no es válida en C99?

Este es un archivo de cabecera

#include  int m = 18; int x = 4; int singles (n) { if (n == 1) return 0; return doubles(n-1); } int doubles (n) { if (n == 1) return 0; return triples(n-1); } int triples (n) { if (n == 1) return m; return (singles(n-1) + doubles (n-1) + triples (n-1))*(m-1); } 

y este es el archivo principal

 #include  #include "test.h" int main () { printf("%d",singles (x)); } 

Así que al menos esto es bastante complicado para mí. La idea es que en la función principal llamaré singles (x), donde x = 4, así que es más como singles (4), llamará a dobles (3), que llamará triples (2), que llamarán a todos los singles (1) que devolverán 0, dobles (1) que devuelven 0 y triples (1) que devolverán m.

Así que el error que estoy recibiendo es

 ./test.h:13:12: warning: implicit declaration of function 'doubles' is invalid in C99 [-Wimplicit-function-declaration] return doubles(n-1); ^ ./test.h:20:12: warning: implicit declaration of function 'triples' is invalid in C99 [-Wimplicit-function-declaration] return triples(n-1); ^ 2 warnings generated. 

Intenté crear un archivo de encabezado .h con la primera secuencia de comandos y luego hice una segunda secuencia de comandos .c que trato de comstackr que no funcionará. Intenté importar la cabecera para intentar evitar este error, pero no parece trabajo. Muchas gracias

Dentro de singles , estás utilizando doubles antes de que se define. De manera similar, en doubles , estás usando triples antes de que se defina. Es por eso que está recibiendo los errores de statement implícita.

Además, no está definiendo el tipo del parámetro n para ninguna de estas funciones.

Debe especificar prototipos de función, que declaran la función sin definirla:

 int singles(int n); int doubles(int n); int triples(int n); 

Además, no debe definir funciones en un archivo de encabezado. Si incluye este encabezado en varios archivos .c y luego los vincula, obtendrá un error porque tendrá múltiples definiciones de esas funciones.

Tome todas las definiciones de funciones y póngalas en test.c. Luego, en test.h, coloca solo los prototipos de arriba. Entonces puedes comstackr todo de la siguiente manera:

 gcc -c test.c gcc -c main.c gcc -o main main.o test.o 

O en una sola línea:

 gcc -o main test.c main.c 

El término “statement implícita” en un mensaje de error generalmente se genera cuando el comstackdor ve la implementación de una llamada a una función antes de la statement (prototipo).

Por ejemplo, deberías tener:
archivo de cabecera

 int singles(int x); int doubles(int x); int triples(int x); 

En su archivo fuente:

 #include "header_file.h" 

Además, en sus definiciones de funciones (implementaciones) debe especificar el tipo de argumento:

 int singles (/* data type */ parameter_name) { //... } 

Edición 1: Se cambió la implementación a la llamada de función por @John Bollinger.