c problem

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_problem_186708/page_1 - zur Vollversion wechseln!


REALtime schrieb am 20.10.2007 um 14:37

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


Burschi1620 schrieb am 20.10.2007 um 15:01

#include "berechnung1.h" (falls im selben ordner)


AoD schrieb am 20.10.2007 um 15:06

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 schrieb am 20.10.2007 um 15:10

ja include geht nicht ist schon eingebunden :(


Burschi1620 schrieb am 20.10.2007 um 15:14

berechnung1 hat doch mit berechnung2 nichts zu tun? Oder sehe ich das falsch?


jives schrieb am 20.10.2007 um 15:14

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 schrieb am 20.10.2007 um 15:23

wie kannch mir den count wert zurückgeben lassen ?

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

lg thomas


AoD schrieb am 20.10.2007 um 15:29

warum übergibst du dieser tollen mittelwert methode nicht einfach den count parameter?


Blair schrieb am 20.10.2007 um 17:34

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 schrieb am 20.10.2007 um 21:01

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 schrieb am 08.11.2007 um 23:39

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 ...


Neo-=IuE=- schrieb am 09.11.2007 um 08:33

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 schrieb am 09.11.2007 um 16:53

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 schrieb am 10.11.2007 um 11:03

Zitat von Vivo
... eine Instanzierung und keine Initialisierung ist, un dann sowas ...

Zitat von Vivo
I-Tüpferlreiter ... :D




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025