¿Por qué recibo clang:error:el comando del enlazador falló con el código de salida 1?

 C Programming >> Programación C >  >> Tags >> Clang
¿Por qué recibo clang:error:el comando del enlazador falló con el código de salida 1?

Acabas de declarar la función. No hay ninguna definición en el código. En el momento del proceso de vinculación, el compilador (aquí clang) no puede vincular power función a su definición, por lo que el enlazador arroja el error en este tipo de situación. Si define

int power(int x, int y)  
         { 
               \*do calculation*/
         }

Luego, el enlazador puede vincular su declaración de power función a su definición, no obtendrá ningún error.

Para un número entero, he creado una función para usted.

#include <stdio.h>
int power(int base, int exp);
int main()
{
int i;

for (i=0; i<10; ++i)
    printf("%d %d %d\n", i, power(2,i), power(-3,i));

return 0;
}

int power(int base, int exp)
{
    int result = 1;
    while (exp)
    {
        if (exp & 1)
            result *= base;
        exp >>= 1;
        base *= base;
    }

    return result;
}

Compile esto con gcc file.c

Espero que entiendas la función. Buena suerte :-)


Te perdiste la definición de la función int power (int base,int n) que se da después de que su principal termina en la siguiente página del libro.

Cuando declara el prototipo de una función, necesita definir qué debe hacer, simplemente declaró la función de potencia y nunca la definió, por eso obtuvo el error.

Incluya la siguiente definición, su código se compilará de la forma que desee.

int power (int base,int n){
int i,p;
p=1;
for (i=1;i<=n;++i)
p=p*base;
return p;
}

RESPUESTA PRE-EDITADA AHORA ESTO NO ES RELEVANTE PERO ÚTIL

Creo que quieres usar la función pow() definido en math.h .

double pow(double a, double b)

La función de biblioteca C pow(double a, double b) devuelve a elevado a la potencia de b . Esta función devuelve un valor doble, por lo que para imprimir ese especificador correcto será "%lf" .

En este caso, solo necesita incluir el archivo de encabezado

#include<math.h>

En tu programa.

No hay necesidad de dar declaración de función int power(int m, int n);

El error que está teniendo se debe a que le dio I como parámetro a pow() porque cuando compilará su código (después de incluir math.h y usando pow() reemplazando i con cualquier número entero compilará su código y le dará el resultado adecuado.

printf("%lf %lf %lf\n", i, pow(2,3), pow(3,2));

Esto le dará el resultado adecuado, pero cuando lo compile con

for (i=0; i<10; ++i){
printf("%lf %lf %lf\n", i, pow(2,i), pow(-3,i));
}

Lanza el mismo error, así que creo que pow() toma solo constantes como entrada para que no se ejecute en for bucle.

Y si no quieres incluir math.h simplemente puede declarar

extern double pow (double base, double exponent); 

Eso se vinculará correctamente con el código de la biblioteca sin usar el math.h incluir archivo, aquí hay un ejemplo.

int main() {
extern double pow (double base, double exponent);
printf("%lf",pow( 8.0, 8.0 ));
return 0;
} 

Para más información sobre pow() puede consultar la página de manual en Linux, es decir, man pow .