Кодирование с помощью c: warning: несовместимое неявное объявление встроенной функции 'exp10' [закрыто]

Я не понимаю, как скомпилировать это.

Я не использовал все функции, которые я создал в этой библиотеке, потому что все они работают правильно, и это первый раз, Я должен использовать math.h

До сих пор я скомпилировал это без проблем:

gcc -c -g f.c gcc -c -g main.c gcc -o main main.o f.o

Я попытался вставить -lm, но я не получаю

// 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);

// function

#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] != '\0'; l++); for(int i = 0; s[i] != '\0'; 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<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; } }
-1
задан 5 October 2017 в 18:07

3 ответа

На странице руководства exp10:

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

   Link with -lm.

CONFORMING TO
   These functions are GNU extensions.

Поскольку это не стандартные функции, вам нужно не только иметь #include <math.h>, но перед #define _GNU_SOURCE вы должны иметь строку #define _GNU_SOURCE ].

Вам также нужно добавить -lm в линию ссылок, поэтому у вас будет

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

Параметры -l обычно появляются после всех .o.

Самый простой способ сделать это - использовать make. Он уже знает, как компилировать и связывать файлы C, поэтому вам просто нужно сказать, какие файлы зависят от других файлов, и изменить некоторые переменные, чтобы добавить настройки, такие как -g и -lm.

Создать файл с именем Makefile с этим содержимым:

CFLAGS += -g
LDLIBS += -lm

main: main.o f.o

main.o: main.c f.h

f.o: f.c f.h

А затем просто введите 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
1
ответ дан 22 May 2018 в 17:49

На странице руководства exp10:

SYNOPSIS #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <math.h> Link with -lm. CONFORMING TO These functions are GNU extensions.

Поскольку это не стандартные функции, вам нужно не только иметь #include <math.h>, но перед #define _GNU_SOURCE вы должны иметь строку #define _GNU_SOURCE ].

Вам также нужно добавить -lm в линию ссылок, поэтому у вас будет

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

Параметры -l обычно появляются после всех .o.

Самый простой способ сделать это - использовать make. Он уже знает, как компилировать и связывать файлы C, поэтому вам просто нужно сказать, какие файлы зависят от других файлов, и изменить некоторые переменные, чтобы добавить настройки, такие как -g и -lm.

Создать файл с именем Makefile с этим содержимым:

CFLAGS += -g LDLIBS += -lm main: main.o f.o main.o: main.c f.h f.o: f.c f.h

А затем просто введите 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
1
ответ дан 18 July 2018 в 05:43

На странице руководства exp10:

SYNOPSIS #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <math.h> Link with -lm. CONFORMING TO These functions are GNU extensions.

Поскольку это не стандартные функции, вам нужно не только иметь #include <math.h>, но перед #define _GNU_SOURCE вы должны иметь строку #define _GNU_SOURCE ].

Вам также нужно добавить -lm в линию ссылок, поэтому у вас будет

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

Параметры -l обычно появляются после всех .o.

Самый простой способ сделать это - использовать make. Он уже знает, как компилировать и связывать файлы C, поэтому вам просто нужно сказать, какие файлы зависят от других файлов, и изменить некоторые переменные, чтобы добавить настройки, такие как -g и -lm.

Создать файл с именем Makefile с этим содержимым:

CFLAGS += -g LDLIBS += -lm main: main.o f.o main.o: main.c f.h f.o: f.c f.h

А затем просто введите 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
1
ответ дан 24 July 2018 в 18:25

Другие вопросы по тегам:

Похожие вопросы: