Hallo,
$ 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
ich habe das hier mit gcc Version 4.3.2 und ar aus
den binutils 2.1.18.20080103 mal genauso probiert und kann
kein auffälliges Verhalten finden, d. h. der Durchschnitt
wird - auch mit Verwendung der Library - korrekt ausgegeben.
Ein paar Anmerkungen seien mir noch erlaubt:
- durchschnitt.h:
Die Zeilen
#define MAX 30
#include <stdio.h>
#include <stdlib.h>
werden allesamt nur in main.c benötigt. Aus Code-Design-Aspekten
würde ich diese Zeilen daher auch in main.c schreiben, zumal es
ja auch sein kann, dass durchschnitt.h von anderen Codes
eingebunden sind, die evtl. <stdio.h> etc. schon anderweitig
inkludieren oder die andere Vorstellungen von MAX haben.
- durchschnitt.c:
Einleuchtender ist es i.d.R., fehlerhafte Parameter gleich
ganz am Anfang einer Funktion abzufangen. Ich hätte daher
am Anfang der Funktion eine Zeile wie folgt erwartet:
if (arrused<=0) return 0.0;
Die Rückgabe return wert /= arrused;
schreibt den Durschnittswert vor Rückgabe auch noch in die lokale
Variable 'wert', was eigentlich überflüssig ist.
- main.c:
Die Routine zum Einlesen einer Zahl ist fehlerträchtig, da
die Länge der Zeichenkette nicht überprüft wird und die
Länge von hilfsarray mit 10 auch nicht gerade großzügig
bemessen ist. Einfacher und sicherer geht es mit fgets.
fgets sorgt dafür, dass nicht mehr Zeichen eingelesen werden
können, als durch den 'size'-Parameter vorgegeben wird
(genaugenommen wird ein Zeichen weniger eingelesen, da ja
noch ein Byte für die abschließende '0' gebraucht wird),
weiterhin gibt fgets NULL zurück, wenn ein EOF erreicht
wird oder der Benutzer Ctrl+D eingibt.
Die main-Routine würde damit so aussehen:
#include "durchschnitt.h"
int main(void) {
int arrayused=0;
double array[MAX];
char hilfsarray[20];
while((arrayused<MAX) && fgets(hilfsarray, 20, stdin))
array[arrayused++] = atof(hilfsarray);
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;
}
Viele Grüße
Andreas