advertencia: ‘struct user_data_s’ declarado dentro de la lista de parámetros

Me sale este error:

transform.c:23: warning: 'struct user_data_s' declared inside parameter list transform.c:23: warning: its scope is only this definition or declaration, which is probably not what you want 

Lo cual creo que es porque tengo una estructura que contiene una estructura.

Esto es lo que estoy tratando de hacer:

 void f2(struct user_data_s* data) { printf("Number %i\n", data->L); } void f1(struct user_data_s* data) { printf("Number %i\n", data->L); f2(data); } 

El printf en f1 funciona, pero la línea

 void f2(struct user_data_s* data) { 

Da el error.

¿Alguien sabe como puedo arreglar esto?

Aarms, louise

Has declarado tu estructura entre (o posiblemente después) tus declaraciones de f2 y f1 . Mueva su statement de estructura para que venga antes de ambas declaraciones.

Es decir:

 struct user_data_s { int L; }; void f2(struct user_data_s* data) { printf("Number %i\n", data->L); } void f1(struct user_data_s* data) { printf("Number %i\n", data->L); f2(data); } 

comstack sin errores, pero

 void f2(struct user_data_s* data) { printf("Number %i\n", data->L); } struct user_data_s { int L; }; void f1(struct user_data_s* data) { printf("Number %i\n", data->L); f2(data); } 

no se comstackrá, porque f2 no tiene forma de saber qué es una struct user_data_s .

Es posible que esté acostumbrado a progtwigr en un lenguaje de nivel superior que le permita colocar sus declaraciones / definiciones prácticamente en cualquier lugar (como C # o Python), pero desafortunadamente, C se comstack estrictamente de arriba a abajo.

El comstackdor ya te dio una buena explicación de lo que está pasando.

No has declarado struct user_data_s por adelantado. El comstackdor ve a struct user_data_s en las definiciones de funciones anteriores por primera vez en la historia. En cada caso, la statement de struct user_data_s tiene un scope de bloque, es decir, es local a la función correspondiente. Esto significa que la primera statement de struct user_data_s en la definición de f1 tiene relación alguna con la segunda statement de struct user_data_s en la definición de f2 . Estas declaraciones declaran dos tipos de struct user_data_s locales (a cada función) completamente diferentes, struct user_data_s . No puede llamar a f2 desde f1 como en su ejemplo, ya que sus tipos de parámetros no están relacionados.

Normalmente, debe tener la struct user_data_s declarada por adelantado en el scope del archivo, en lugar de declararlo en la definición de la función. ¿Olvidó incluir un encabezado con la statement de struct user_data_s por casualidad?