Codificação com c: aviso: declaração implícita incompatível da função interna 'exp10' [fechada]

-1

não entendo como compilar isso.

Eu não coloquei todas as funções que fiz nesta biblioteca porque todas elas funcionam corretamente, e é a primeira vez que eu uso o math.h

Até agora eu compilei assim sem problemas:

gcc -c -g f.c

gcc -c -g main.c

gcc -o main main.o f.o

Eu tentei inserir -lm , mas não entendo como e onde ele deve ser colocado.

// header

#include<math.h>
#define MAX 5

typedef enum {FALSE, TRUE} bool;

typedef enum {ERROR=-1, OK=1} status;

status parse_int(char s[], int *val);

// função

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include"f.h"


status parse_int(char s[], int *val) {

    int l, val_convertito = 0, val_momentaneo = 0;
    for(l = 0; s[l] != '
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include"f.h"


int main() {

    int val_con, *val, ls;
    char s_int[ls];

    printf("Inserisci la lunghezza della stringa: ");
    scanf("%d", &ls);

    printf("\n");
    printf("Inserisci l'intero da convertire: \n");
    scanf("%s", s_int);

    val = &val_con;

    status F8 = parse_int(s_int, val);

    switch(F8) {
        case OK:  printf("Valore convertito %d\n", val_con);
                  break;
        case ERROR: printf("E' presente un carattere non numerico.\n");
                    break;
    }

}
'; l++); for(int i = 0; s[i] != '
gcc -c -g f.c

gcc -c -g main.c

gcc -o main main.o f.o
'; i++) { if(s[i] >= '0' && s[i] <= '9') { val_momentaneo = ((int) (s[i]-48)) * ((int)exp10((double)l--)); val_convertito += val_momentaneo; *val = val_convertito; } else return ERROR; } return OK; }

// main

#include<math.h>
#define MAX 5

typedef enum {FALSE, TRUE} bool;

typedef enum {ERROR=-1, OK=1} status;

status parse_int(char s[], int *val);
    
por Zeno Raiser 05.10.2017 / 17:07

1 resposta

1

Na página de manual do exp10 :

SYNOPSIS
   #define _GNU_SOURCE         /* See feature_test_macros(7) */
   #include <math.h>

   Link with -lm.

CONFORMING TO
   These functions are GNU extensions.

Como essas não são funções padrão, você não precisa apenas de #include <math.h> , mas deve ter a linha #define _GNU_SOURCE antes da linha #include <math.h> .

Você também precisa adicionar -lm na linha de link, então você teria

gcc -o main main.o f.o -lm

As opções -l normalmente vêm depois de todos os arquivos .o .

A maneira mais fácil de fazer tudo isso é usar make . Ele já sabe como compilar e vincular arquivos C, portanto, basta informar quais arquivos dependem de quais outros arquivos e alterar algumas variáveis para adicionar personalizações como -g e -lm .

Crie um arquivo chamado Makefile com este conteúdo:

CFLAGS += -g
LDLIBS += -lm

main: main.o f.o

main.o: main.c f.h

f.o: f.c f.h

Em seguida, basta digitar make :

$ make
cc -g   -c -o main.o main.c
cc -g   -c -o f.o f.c
cc   main.o f.o  -lm -o main
    
por Mark Plotnick 05.10.2017 / 18:58