Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    [C] Errore nel calcolo della radice quadrata

    Ciao a tutti.
    Ho bisogno di calcolare la radice quadrata di un numero nel seguente programmino
    codice:
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <math.h>
    
    #define odd(i) ((i % 2 != 0) ? 1 : 0)
    
    main ()
    {
    	time_t t;
    	int base, altezza, x1, x2, y1, y2;
    	double ipotenusa, *i;
    	
    	srand((unsigned) time(&t));
    	x1 = rand() % 50;
    	x2 = rand() % 50;
    	y1 = rand() % 50;
    	y2 = rand() % 50;
    	base = fabs(x1 - x2);
    	altezza = fabs(y1 - y2);
    	printf("%d, %d, %d, %d %d %d\n", x1, x2, y1, y2, base, altezza);
    	ipotenusa = (double) ((base*base) + (altezza*altezza));
    	ipotenusa = sqrt(ipotenusa);
    	printf("%f\n", ipotenusa);
    }
    ma ottengo il seguente errore in compilazione:
    codice:
    /tmp/ccg8ovkP.o(.text+0x137): In function `main':
    random.c: undefined reference to `sqrt'
    collect2: ld returned 1 exit status
    Sapreste darmi qualche consiglio?
    Grazie

  2. #2
    Devi linkare la math.h:
    codice:
    $ gcc -lm file.c -o file.bin

  3. #3
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Grazie 1000! Così va tutto ok. Un altro piccolo favore: potresti spiegarmi come mai non mi compila semplicemente con
    codice:
    gcc nomefile.c
    visto che nel file ho incluso math.h dove è contenuto sqrt?

    EDT: inoltre ho notato che basta digitare
    codice:
    gcc -lm file.c
    Cosa fa il comando -lm ed il file.bin?
    Ringrazio anticipatamente

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In realta' -lm indica al compilatore che deve utilizzare la "libreria" matematica, non l'include math.h ...

    Nell'include *non esiste il codice* ma soltanto le dichiarazioni delle funzioni, costanti, strutture. Il codice vero e proprio sta nelle file di libreria che vengono incluse nella compilazione con lo switch -lm

  5. #5
    Originariamente inviato da Alcott
    Cosa fa il comando -lm ed il file.bin?
    Sintassi BASE di gcc:

    gcc <parametri> -o outfile infile (o anche file -o outfile)

    gcc -lm file.c -o file.bin

    file.bin è l'eseguibile creato, al posto di a.out.
    EDIT: per evitare confusione: per il nome dell'eseguibile ci puoi mettere quello che vuoi: io metto .bin per distinguerli, nella shell, dai sorgenti, ma non è una vera estensione, sempre di elf si tratta.

  6. #6
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Perfetto!
    Grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.