[C] Anfängerschwierigkeiten

tedlemegba

abgemeldet
20 April 2006
2.729
175
Hallo!

Ich würde mir Aufgrund eines ernst gemeinten Teilnahmeversuches am BWINF 27 / Runde 2 [A / B] gerne grundlegende Kenntnisse in C aneignen wollen, weil ich die "später" eh noch brauchen werde. Zum Einstieg hab ich ein wenig versucht hier drin zu lesen. Der liebe Compiler meint's aber nicht ganz so gut mit mir und hin und wieder tauchen doch ein paar Problemchen auf. Darum bitte ich hier um eure Hilfe! :)

Folgendes am Anfang: ich habe zwei Arrays bestehend aus chars (eigentlich integer-Werte, die sich aber im Rahmen von 0 bis 255 bewegen). Die Länge will ich im Code soweit noch "dynamisch" gestalten (nicht überall im Code eine Zahl ändern müssen oder eine sizeof-Funktion zur Länge aufrufen müssen). Allerdings ist das ganze ein bisserl zickelig.

const char length_of_foo = 10;
const char length_of_bar = 5;

char foo[length_of_foo];
char folge[length_of_bar];​

Auf alle vier Variablen würde ich gerne global zugreifen können. Wenn ich den Block allerdings oberhalb von main schreibe, kommt "variable-size type declared outside of any function". Irgendwie kommt der Compiler mit meinen Konstanten nicht so ganz klar. Steht alles in main, funktioniert's problemfrei -- aber Zugriff nur von main aus. Ein static vor den Variablen bringt mir dann "storage size of `foo' bzw. `bar' isn't constant. Was tun?

Merci beacoup! ;)

Edit/PS: Die Variablen jeder Funktion als Parameter zu übergeben finde ich mehr als hässlich. Oder ist das Gang und Gebe? Hm.. in einem späteren Status des Programmes würde ich gerne noch die Variablen alice und bob per Kommandozeile übergeben lassen -- aber auch mit globalem Zugriff (aber auch Konstanten). Gestaltet sich das dann ähnlich problematisch?

PPS: Bloodshed Dev-C++ Version 4

Noch ein Edit: Ich befürchte ja auch fast, dass static das falsche Schlüsselwort ist. Aber was tut dann richtig?
 
sizeof ist keine Funktion.... auch wenn sie wie eine Funktion aussieht sie ist aber keine.... ist ein operator und eigentlich spricht nix gegen ihn wenn du dynamsiche sachen da hast...

hmm so Array grössen verwende ich immer define.... weil 2 byte für längen drauf gehen zu lassen... naja muss man selber wissen...

Wenn du die Arrays global haben willst kannst du das nicht über die Konstante festlegen, nimm define dann sollte es gehen....
 
sizeof ist keine Funktion.... auch wenn sie wie eine Funktion aussieht sie ist aber keine.... ist ein operator und eigentlich spricht nix gegen ihn wenn du dynamsiche sachen da hast...
Nicht? Dann hätte ich ja als nächstes von mir aus noch Methode durchgehen lassen -- so sieht's nämlich eher aus (Funktion ist natürlich quark.. oder auch nicht, nachdem die gute Methode.. na ja lassen wir das). Also ein unärer Operator? Sowas doofes. :mrgreen:

hmm so Array grössen verwende ich immer define.... weil 2 byte für längen drauf gehen zu lassen... naja muss man selber wissen...

Wenn du die Arrays global haben willst kannst du das nicht über die Konstante festlegen, nimm define dann sollte es gehen....
Ich bin doch nur doofer Anfänger. Dann kugg ich mir nachher halt mal define an, danke. Aber ich glaube das löst mein Problem nicht unbedingt.. oder vielleicht doch. Na erstmal ankuggn. :D

Edit: Ah okay.. das ist praktisch die Sache mit dem lieben Präprozessor?! :)
 
Zuletzt bearbeitet:
Ich frage mich gerade, warum du "C" und nicht "C++" lernen willst. Streng genommen ist
const char length_of_foo = 10;
const char length_of_bar = 5;​
bereits C++, da const kein Sprachelement der Sprache C ist. Du verwendest einen C++-Compiler, deshalb funktioniert das, aber C ist das strenggenommen nicht.

Mit #define zu arbeiten ist C, keine Frage, solche defines haben aber auch ihre Tücken (vgl. z.B. Scott Meyers, "Effektiv C++ Programmieren", Lektion 1).

Vieles, was in C eine globale Variable ist (und solche sind fast immer als gefährlich und unschön zu betrachten), ist etwas, was in der Objektorientierten Welt ein Attribut einer Klasse ist, also als Membervariable einer Klasse implementiert würde. Wäre solch ein Wert derart konstant, daß er sogar für alle Instanzen einer Klasse gleich und fest wäre, würde man daraus eine statische Member-Variable machen. Zugriff darauf haben dann alle Methoden der Klasse und in aller Regel sind das genau die Code-Stücke, an die Du den Wert in der "C"-Welt als Parameter übergeben würdest.

C++ ist nicht schwieriger als C, C++ enthält aber C. Manches was C sein muß ist dennoch mit vielen schrecklichen Klimmzügen auf "objektorientiert" getrimmt und entsprechend beschrieben um einigermaßen übersichtlich zu sein, z.B. die Acrobat PDF API).

Was Du bis jetzt über C gelernt hast ist nicht verloren, aber der Umstieg von C zu C++ ist nicht so einfach, weil man in C++ einfach anders denkt. Umgekehrt geht es einfacher. Für den Weg von C nach C++ gibt es übrigens ein Buch "In C++ denken".
 
Ich frage mich gerade, warum du "C" und nicht "C++" lernen willst.

Ich werde C noch im Beruf brauchen, weil ich hardwarenah programmieren werde. C++ weicht dagegen wohl davon ab. Kommt ja die OOP dazu. Den Rest muss ich mir nochmal durchlesen, der war jetzt nicht so klar. :mrgreen: Ich bin so oder so am Anfang. Der Umstieg C++ :arrow: C sollte mir später nur nicht allzu schwer fallen. Danke dir.
 
Ich werde C noch im Beruf brauchen, weil ich hardwarenah programmieren werde.

ASM? :p

weiss nich also unsere Sachen haben wir mit einer Erweiterung für C programmiert also wo es dann auch Bits und so gibt, naja konnt mich da gut vor der Implementierung drücken, dafür hab ich halt das asm gefrickel gemacht....