Frage zu gcc.
Von: Anton Müller (morenablanca@gmx.de) [Profil]
Datum: 04.01.2009 23:23
Message-ID: <1hfw25cev56pm$.pbupul9lsb3v.dlg@40tude.net>
Newsgroup: de.comp.gnu
Datum: 04.01.2009 23:23
Message-ID: <1hfw25cev56pm$.pbupul9lsb3v.dlg@40tude.net>
Newsgroup: de.comp.gnu
Hallo,
ich hab heute wieder mal ein kleines (Übungs)Programm aus der Mottenkiste
geholt, welches ich vor längerer Zeit einmal schrieb, und wollte dieses mit
dem gcc 4.1.2 20061114 (prerelease) (Debian 4.1.1-21) kompilieren.
Mit welchem Compiler ich das Programm damals kompiliert hatte, das kann ich
heute nicht mehr sagen, tut auch nix zur Sache.
Auf jedenfall wird vom Kompiler eine Fehlermeldung ausgegeben, daß die
Funktion pow(x,y) (zum Potenzieren x^y), die normalerweise in der math.h
definiert ist, nicht definiert sei, und das, obwohl ich die math.h
includiert hab.
Mit google hab ich rausgefunden, daß man für das Kompilieren dieser
Funktion noch die Optionen -lm setzen muß, so dass die Befehlszeile
gcc -o rundatei -lm quellcode.c heißen muß, was dann auch funktioniert hat.
Dennoch hätte ich gerne gewußt, wozu die Optionen -lm nötig sind, bzw was
es damit aufsich hat, weshalb die in diesem Falle nötig ist, wo ich doch
die math.h includiert hab. Dummerweise ist auf meinem System die man gcc
"kaputt" und aus der man-page aus dem Internet werd ich auch nicht richtig
schlau.
Aber vielleicht kann mir ja hier jemand sagen, welche Bewandnis es mit den
Optionen -lm auf sich hat.
Ach ja, falls es jemanden interessiert, hier mein Übungsprogramm,
selbstgestrickt und funktionsfähig!
/*Projekt - Umwandlung Hex-Zahlen in Zezimalzahlen - */
/*Ver. 2*/
//Kompilerinfo für Linux gcc
// muß mit gcc -o ausfuerbare Binary -lm xx.c kompiliert werden
// -lm wurde notwendig wegen der Funktion pow.
// und einem Wincompiler war das wohl nicht nötig...???
// Fehler durch Begrenzung der Anzahl der Eingabezeichen begrenzt
#include<stdio.h>
#include<math.h>
#define MAX_LENGTH 7
//MAX_LENGTH AUF 6 = 7 Zeichen heruntergesetzt (war vorher auf 13 gesetzt.)
#define NEIN 0
#define JA 1
int main(void){
char a[MAX_LENGTH];/*Eingangsvektro*/
char ab [MAX_LENGTH]; /*Zwischenvektor*/
int abc [MAX_LENGTH];
loop:;/*um belieg oft eine Zahl einzugeben*/
long erg=0;
char b;
int i=0;/*Eingangszähler*/
int j; /*Zwischenzaehler*/
int k=0; /*Umsetzungszaehler*/
int tolong=NEIN;
printf("\n\n\n\n\n\n\n\n\n\nEine hexadezimale Zahl mit maximal sieben
Zeichen eingeben.\n Erlaubt sind die Zeichen [0..9|a...f|A...F]\n");
while((b=getchar())!='\n'){/* Zahl einlesen*/
//whileschleife wird nach Return für jede Stelle durchlaufen
//so lange, bis ein Return bzw ein '\n' erfolgt
if(i<=(MAX_LENGTH-1)){//so lange wie die Maximallänge nicht
//erreicht ist, wird der Eingabebuffer ausgelesen
a[i++]=b;
//und in den Vektor a[] abgespeichert
}
else{//Eingabe wurde zu lang
tolong=JA;
printf("\n\nEingegebene Zahl zu lang\n\n\n");
//return 1;
while(getchar()!='\n');//Tastatrupuffer leeren, bis Returnzeichen
gefunden
goto loop; //erneuter Eingabeversuch
}
}
for (j=i-1;j>=0;--j){/*Umdrehung des Eingagsvektors, so das die
niederwertigste Stelle an Platz 0 steht */
ab[k++]=a[j];
/*printf("\nHier ... %c\n",a[j]);*/
}
for (j=0;j<=i-1;++j){/*Umwandlung der Hexziffern in Dez-ziffern*/
/* printf("ppp111\n\n");
printf("%c\n\n",ab[j]);*/
if(ab[j]>='0' && ab[j]<='9'){//Abfrage ob ein Zeichen von 0...9
/*printf("hier");*/
abc[j]«[j]-'0'; //Wertzuweisung
}
else{
if(ab[j]>='a' && ab[j]<='f'){//Abfrage ob Zeichen von a...f
abc[j]«[j]-'a'+10;//Wertzuweisung
}
else{
if(ab[j]>='A' && ab[j]<='F'){//Abfrage ob Zeichen von A...F
abc[j]«[j]-'A'+10;
}
else{
printf("Ungueltiges Zeichen\n\n");
//return 0;
goto loop; //Ungültiges Zeichen, neuer Versuch von Anfang!
}
}
}
}
for (j=0;j<=(i-1);++j){/*Aufaddierung der Stellen*/
//i=Anzahl der Stellen, j=Exponent der 16er Basis, abc[] befinden sich die
//Multiplikatoren für die jeweilige Stelle
erg=erg + abc[j]*pow(16,j);//Bereichnung des jeweiligen
Stellenergebnisses und Aufaddierung
}
printf("\n\nErgebnis= %d\n\n",erg);
//return 0;
goto loop;
}
Anton
[ Auf dieses Posting antworten ]Antworten
- Jürgen Wieferink (05.01.2009 08:49)
- Anton Müller (05.01.2009 12:17)
- Jürgen Wieferink (05.01.2009 12:31)
- Stefan Reuther (05.01.2009 17:51)
