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

时间:2017-10-05 16:39:40

标签: c compilation warnings

//在此解决:https://askubuntu.com/questions/962252/coding-with-c-warning-incompatible-implicit-declaration-of-built-in-function

我不明白如何编译它。

我没有把我在这个库中创建的所有函数都放在一起,因为它们都正常工作,这是我第一次使用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 个答案:

答案 0 :(得分:0)

  1. 此任务需要任何exp10和double值。
  2. 你有像strlen这样的标准C函数来发现字符串长度(但这里不需要
  3. 您的功能可以删除到:

    int str_to_int(const char* value)
    {
        int res = 0;
        while (*value)
        {
            if (!isdigit(*value)) return -1;
            res *= 10;
            res += *value++ - '0';
    
        }
        return res;
    }
    
    status str_to_int1(const char* value, int *res)
    {
        *res = 0;
        while (*value)
        {
            if (!isdigit(*value)) return ERROR;
            *res *= 10;
            *res += *value++ - '0';
    
        }
        return OK;
    }