Hallo,
ich wollte testen, wie ich statische Bibliotheken verwenden kann. Dazu habe ich mir ein kleines Testprogramm geschrieben, das den Durchschnitt errechnet, wobei die Berechnung in der statischen Bibliothek vonstatten geht:
durchschnitt.h
---------------------------
#define MAX 30
#include <stdio.h>
#include <stdlib.h>
double durchschnitt(double arr[], int arrused);
durchschnitt.c
--------------------------
double durchschnitt(double arr[], int arrused) {
double wert = 0.0;
for (int i = 0; i < arrused; i++) {
wert += arr[i];
}
if (arrused != 0)
return wert /= arrused;
return wert;
}
Main.c
-----------------------------
#include "durchschnitt.h"
int main(void) {
int c;
int j;
int arrayused;
double array[MAX];
char hilfsarray[10];
j = arrayused = 0;
while (arrayused < MAX && ((c = getchar()) != EOF)) {
if ( (c >= '0' && c <= '9') || c == '.') {
hilfsarray[j++] = c;
}
else {
hilfsarray[j] = '\0';
array[arrayused++] = atof(hilfsarray);
j = 0;
}
}
for (int i = 0; i < arrayused; i++) {
printf("Zahl %d: %f\n", i+1, array[i]);
}
printf("Durchschnitt: %f\n", durchschnitt(array, arrayused));
return 0;
}
Wäre dieser Code in einer einzigen Datei stehen, würde der Durchschnitte richtig berechnet werden. Ironischerweise funktionier es aber nicht, wenn ich dies als Bibliothek auslagere. Im Ergebnis werden nämlich Hausnummern angezeigt. Gebe ich zB nur eine Zahl ein, zB 5, bekomme ich als Ergebnis:
5
Zahl 1: 5.000000
Durchschnitt: 0.057253
Gebe ich 3 ein, bekomme ich folgendes:
3
Zahl 1: 3.000000
Durchschnitt: 0.073297
Der Code ist richtig. Ich habe alle per Copy&Paste aus der Gesamtdatei übernommen. Es muss also irgend etwas beim Zerteilen in Einzeldateien oder beim Kompilieren schief laufen, aber was? Ich ging dabei so vor:
$ gcc -c durchschnitt.c -o durchschnitt.o -std=c99
$ ar rcs libdurchschnitt.a durchschnitt.o
$ gcc -static durchschnitt.h Main.c -L. -ldurchschnitt -o Main_statisch -std=c99
Aufruf durch ./Main_statisch
Kann sich jemand dieses Phänomen erklären?
Danke,
Markus