2017-10-05 17 views
0

// ICI RESOLU: https://askubuntu.com/questions/962252/coding-with-c-warning-incompatible-implicit-declaration-of-built-in-functioncodage avec c: avertissement: déclaration implicite de la fonction intégrée « EXP10 »

Je ne comprends pas comment compiler cela.

J'ai mis na pas toutes les fonctions que j'ai fait dans cette bibliothèque parce que tous fonctionnent correctement, et il est la première fois que je dois utiliser math.h

Jusqu'à présent, j'ai compilé comme cela sans problèmes:

gcc -c -g f.c 

gcc -c -g main.c 

gcc -o main main.o f.o 

J'ai essayé d'insérer -lm mais je ne comprends pas comment et où il doit être roulés.

// tête

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

// Fonction

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

// principale

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

} 
+0

Essayez d'ajouter '-lm' à votre commande 'gcc' –

+0

@EugeneSh. Je l'ai fait mais je ne comprends pas où ti le mettre –

+0

' gcc -o principal -lm main.o fo' –

Répondre

0
  1. Vous avez besoin d'une EXP10 et doubles valeurs pour cette tâche.
  2. Vous avez des fonctions standard C comme strlen pour découvrir la longueur de chaîne (mais n'est pas nécessaire ici

Votre fonction peut être démonté à:

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; 
} 
+0

Merci, mais ce n'est pas ce dont j'ai besoin –

+0

@Zeno Raiser facile à modifier à vos typedefs - voir le second –

+0

Merci l'homme vraiment mais j'ai besoin d'apprendre comment ti compiler avec math.h, c'est le point de ma question –