"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

c problem

REALtime 20.10.2007 - 14:37 1132 13
Posts

REALtime

mangily d0g
Avatar
Registered: Feb 2001
Location: Austria, Kloster..
Posts: 1364
angenommen ich habe eine funktion in der main

main.c:
void main (void)
{
convert(100, 1000);
}



berechnung1.h:
convert(int count, int test);

berechnung1.c:

convert()
{
irgendwas....;
}




berechnung2.c:


float mittelwert()
{
int j=0;
float wert = 0.0;

for (j=0;j<count;j++)
{
wert = wert + array[j];
}

wert = wert / count;
return wert;
}

ergibt logischerweise die fehlermeldung: undefined identifier

wie kann ich mir den parameter der einen funktion auch in einem anderen c file sichtbar machen ?

lg thomas
Bearbeitet von REALtime am 20.10.2007, 14:41

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
#include "berechnung1.h" (falls im selben ordner)

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
is bei mir schon ein paar jahre her, aber damit man rekursionen mit den includes (file A includes file B includes file C includes file A .....) vermeidet gibts folgende Vorgehensweise:

kA ob die Syntax so passt.

file A:
#define fileA

file B:
#ifndef fileA
#include fileA
#endif

=> jedes file definiert eine konstante und das include wird nur gemacht, wenn die konstante noch nicht definiert wurde. Wurde sie schon definiert, bedeutet das natürlich, dass das File schon vorher eingebunden wurde.

REALtime

mangily d0g
Avatar
Registered: Feb 2001
Location: Austria, Kloster..
Posts: 1364
ja include geht nicht ist schon eingebunden :(

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
berechnung1 hat doch mit berechnung2 nichts zu tun? Oder sehe ich das falsch?

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Den Parameter kannst du gar nicht sichtbar machen, der existiert ausschließlich in der Funktion selbst.
Entweder du lässt convert() den Parameter einfach zurückgeben, oder du arbeitest mit Pointern auf count, oder mit globalen Variablen (=böse).

REALtime

mangily d0g
Avatar
Registered: Feb 2001
Location: Austria, Kloster..
Posts: 1364
wie kannch mir den count wert zurückgeben lassen ?

kannst mir ein bespiel geben mit pointer und eines mit globalen variablen ?

lg thomas

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
warum übergibst du dieser tollen mittelwert methode nicht einfach den count parameter?

Blair

Big d00d
Avatar
Registered: Dec 2004
Location: Graz
Posts: 177
was willst damit überhaupt anfangen? wenn du count von außen übergibst und der wert größer als da arrayindex wird, dann schießt dir sowieso ins knie.

bisserl wenig informationen gibts da, was du wie verwenden möchtest.

strukturier das ganze etwas übersichtlicher, dann versteht auch jeder was du willst. derzeit kann jeder nur die kristallkugel anwerfen versuchen.

wenn du die mittelwert() derzeit so hast, dann wird dich der compiler steinigen, daß du ihm weder array, noch count irgendwo definiert hast.

rein von der struktur her gehe ich jetzt mal davon aus, daß du irgendwo in main() das array definierst und vollschreibst. ebenfalls in main rufst du dann die mittelwert funktion auf, die namensgebendes ausführt. dazu müßtest du ihr aber das array als parameter übergeben und den wert dann eben ausrechnen. der "count" identifier ist dann sowieso überflüssig, weil am ende von for der counter+1 eh der arraygröße entspricht (hoffentlich ;)).

was du mit convert machen willst, kann man sich ja wirklich nur aus den fingern zuzeln...

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Als allererstes, es ist vollkommen egal in welchem file was drinnen steht, sobald du #include ... verwendest kopiert der preprozessor alle dateien zusammen.

Zweitens ein pointer ist ein Zeiger auf eine variable, du initialisierst ihn üblicherweise mit zb:

int *count;

der große Vorteil ist, dass du einer Funktion eine Variable übergeben kannst, die dann ihre Wert auch nach dem ende der Funktion behält. Kurzes Beispielprogramm:

Zitat
#include <stdio.h>

void bah(int *a)
{
printf("bah:%i\n", *a);
*a=4;
}

int main()
{
int b=12;
bah(&b);
printf("main:%i\n", b);
return 0;
}

schaus dir mal an

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Sorry, aber bei dem was du da alles geproggt hast RT bekommt man ja Augenkrebs. Ich habs eben schnell so ausgebessert wie (ich glaube, dass) du es gemeint haben könntest (Kompilierbarkeit nicht garantiert) ...

Code: PHP
main.c:

#include "berechnung1.h"
#include "berechnung2.h"

void main (void) {

	int meine_zahlen[] = {1, 2, 3, 4};
	float mein_mittelwert;

	mittelwert = mittelwert(meine_zahlen, 4);
	convert(100, 1000);
}

===

berechnung1.h:

void convert(int, int);

===

berechnung1.c:

void convert(int wert_a, int wert_b) {
	irgendwas....;
}

===

berechnung2.h:

float mittelwert(int[], int);

===

berechnung2.c:

float mittelwert(int array[], int count) {
	int j, wert;

	for (j=0;j<count;j++) {
		wert = wert + array[j];
	} 
	return (float)(wert / count);
}

Edit: Achja, da eigentlich nur mit Werten hantierst, brauchst du in diesem Fall überhaupt keine Pointer ...
Bearbeitet von Vivo am 08.11.2007, 23:42

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3232
Zitat von Vivo
Edit: Achja, da eigentlich nur mit Werten hantierst, brauchst du in diesem Fall überhaupt keine Pointer ...

aso und "int array[]" ist kein pointer? :P

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
I-Tüpferlreiter ... :D
Jetzt hab ich extra "übersehn", dass das ..
Zitat von Marcellus
Zweitens ein pointer ist ein Zeiger auf eine variable, du initialisierst ihn üblicherweise mit zb:

int *count;
... eine Instanzierung und keine Initialisierung ist, un dann sowas ...

//btw. es ist tatsächlich kein Pointer im eigentlichen Sinne ;)

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Zitat von Vivo
... eine Instanzierung und keine Initialisierung ist, un dann sowas ...

Zitat von Vivo
I-Tüpferlreiter ... :D
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz