Error: “esperado” (‘antes de la cadena constante “

Trabajando en el cálculo de la media geométrica de los valores en una matriz

La función debe calcular la media geo correctamente, pero aparece un mensaje de error extraño

#include  #include  #include  extern "C" double geomean(double myarray[], int count) ////error here, expected '(' before string constant { double geomean = 1; double root = (1/(double)count); int i; for(i = 0; i < count; i++) { geomean = geomean * myarray[i]; } geomean = pow(geomean, root); return geomean; } 

extern "C" no es válido C (solo es válido en C ++). Solo quítalo si estás trabajando en puro C.

Estoy respondiendo a esta pregunta en un bash de cubrir que podría haber sido cubierto en una respuesta más detallada para ayudar al interrogador u otras personas que visitan esta página.

Error: “esperado” (‘antes de la cadena constante ”

Como se mencionó en alguna otra respuesta de su pregunta, extern "C" no es válido C (solo es válido en C ++). Puedes eliminarlo si solo estás usando C. puro

Sin embargo, si usted (o alguien más) tiene una mezcla de archivos fuente de C y C ++, entonces puede hacer uso de la macro __cplusplus . __cplusplus macro __cplusplus se definirá para cualquier unidad de comstackción que se esté ejecutando a través del comstackdor de C ++. En general, eso significa que los archivos .cpp y cualquier archivo incluido por ese archivo .cpp.

Por lo tanto, el mismo .h (o .hh o .hpp o what-have-you) podría interpretarse como C o C ++ en diferentes momentos, si diferentes unidades de comstackción los incluyen. Si desea que los prototipos en el archivo .h se refieran a los nombres de los símbolos C, deben tener una “C” externa cuando se interpretan como C ++, y no deben tener una “C” externa cuando se interpretan como C (como en su caso estabas recibiendo un error!).

 #ifdef __cplusplus extern "C" { #endif // Your prototype or Definition #ifdef __cplusplus } #endif 

Nota: Todo lo que hace extern "C" externamente afecta el enlace. Las funciones de C ++, cuando se comstackn, tienen sus nombres destrozados. Esto es lo que hace posible la sobrecarga. El nombre de la función se modifica según los tipos y la cantidad de parámetros, de modo que dos funciones con el mismo nombre tendrán nombres de símbolos diferentes.

Si está incluyendo un encabezado para el código que tiene un enlace C (como el código comstackdo por un comstackdor de C), debe extern "C" el encabezado en extern "C" , de esa manera podrá vincularlo con la biblioteca. ( Otherwise, your linker would be looking for functions with names like _Z1hic when you were looking for void h(int, char) ).

la primera línea debe ser: extern C;

La otra opción sería declarar c fuera de la función principal sin la palabra clave extern