Я не понимаю, как скомпилировать это.
Я не использовал все функции, которые я создал в этой библиотеке, потому что все они работают правильно, и это первый раз, Я должен использовать 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;
}
}
На странице руководства 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
На странице руководства 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
На странице руководства 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