使用 c 编码:警告:内置函数“exp10”的隐式声明不兼容

使用 c 编码:警告:内置函数“exp10”的隐式声明不兼容

我不明白如何编译这个。

我没有把我制作的所有函数都放在这个库中,因为它们都正常工作,这是我第一次使用 math.h

到目前为止我已经像这样编译了,没有任何问题:

gcc -c -g f.c

gcc -c -g main.c

gcc -o main main.o f.o

我已尝试插入,-lm但我不知道该如何插入以及插入到哪里。

//标题

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

//功能

#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;
}

//主要的

#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

来自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在该#include <math.h>行之前有该行。

您还需要添加-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

相关内容