Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

Klotzkopp und meine Wenigkeit haben gerade ein bisschen diskutiert, wie Änderungsvorschläge und Korrekturen für FAQ-Beiträge zu handhaben sind.

Um den eigentlichen FAQ-Thread übersichtlich zu halten, habe ich einen "Änderungsvorschläge" Thread geöffnet. Und den ersten Vorschlag hätte ich auch schon Thema "Bibliotheken"

Neu:

Zusätzlich zu den Headerdateien werden oft noch Libraries (Bibliotheken) benötigt (beispielsweise *.lib, *.a, *.dll, *.so, etc. ), die den eigentlichen Programmcode für die einzelnen Funktionen enthalten. Standardfunktionen wie printf(), open(), close() werden üblicherweise in einer Standardbibliothek zusammengefasst, die automatisch gelinkt wird.

Begründung:

Allgemeingültige Fragen (wie beispielsweise nach Bibliotheken) sollten auch möglichst allgemeingültig beantwortet werden, ohne dabei auf systemspezifische Dinge einzugehen. Die Originalantwort von Guybrush Threepwood ist aber ziemlich windowslastig:

Zusätzlich zu den Headerdateien werden oft noch statische Libraries (Bibliotheken) benötigt (.lib, .a), die entweder selbst die Funktionsdefinitionen enthalten oder auf dynamische Bibliotheken (.dll, .so) verweisen.

Bei Unixbasierten Systemen sind statische und shared libraries zwei unterschiedliche Dinge, die auch beim Linken mit berücksichtigt werden müssen (eine shared lib wird anders behandelt als eine statische Bibliothek).

Achso, noch was. Es wäre hilfreich, die einzelnen FAQ-Beiträge zu nummerieren, das mach die Referenzierung einfacher.

Nic

Geschrieben

Hi,

ich geb dir recht das das äußerst Windowslastig war, liegt einfach daran dass ich

bisher nur mit Windows gearbeitet habe. Ich kann also nichts dazu sagen ob man

dass für Unix noch mehr erweitern muß.

Allerdings finde ich deine Erklärung zu allgemein, da man glaube ich damit

immer noch nicht wüßte was genau man jetzt mit diesen Bibliotheken

anstellen soll.

Gruß

Guybrush

Geschrieben

Ich hätte da auch einen Änderungsvorschlag:

Strings können nicht über den == Operator miteinander verglichen werden, da so nur ihre Startadressen verglichen werden. Um solche Vergleiche durchzuführen gibt es verschiedene Funktionen, z.B. strcmp(), die in einer C Referenz oder hier auf dem Board nachgelesen werden können.

Hier wird nur C behandelt, aber die FAQ ist ja für C und C++. In C++ gibt es für Strings aus <string> sehr wohl den Operator == mit dem man zwei Strings vergleichen kann. Ich bin dafür, daß die Unterschiede besser herausgearbeitet werden. Zum Beispiel könnte man von CStrings sprechen, wenn die Rede von char* ist.

Bis denn dann

Jan

Geschrieben
Originally posted by Orffi

Ich hätte da auch einen Änderungsvorschlag:

Hier wird nur C behandelt, aber die FAQ ist ja für C und C++. In C++ gibt es für Strings aus <string> sehr wohl den Operator == mit dem man zwei Strings vergleichen kann. Ich bin dafür, daß die Unterschiede besser herausgearbeitet werden. Zum Beispiel könnte man von CStrings sprechen, wenn die Rede von char* ist.

Bis denn dann

Jan

Da muß ich dir wiedersprechen, in meinem Beitrag wurde ein String deklariert

(char array[10]), der wie ich beschrieben habe nicht per == verglichen werden kann.

Was du mit CString meinst ist kein String, sondern ein Objekt welches als

Membervariable einen String enthält. Der Überladende Operator == dieses

Objekts kann auch keine Strings vergleichen, sondern ruft intern auch

anderen Funktionen dafür auf um dieses Verhalten zu simulieren.

Gruß

Guybrush

Geschrieben
Originally posted by Orffi

Ich bin dafür, daß die Unterschiede besser herausgearbeitet werden. Zum Beispiel könnte man von CStrings sprechen, wenn die Rede von char* ist.

Darum habe ich den Beitrag mit "Strings in C und wie man sie vergleicht" betitelt. Man könnte das natürlich im Text des Beitrags auch noch mal erwähnen.
Geschrieben

@Klotzkopf

Ich muß gestehen, daß ich dies überlesen habe. Allerdings wäre ich trotzdem dafür, daß unter dem Thema "Strings" beide Sprachen abgehandelt werden und in diesem Zusammenhang auf die Unterschiede hingewiesen wird.

@Guybrush Threepwood

CString mag in der Welt von Microsoft eine Bezeichnung für einen String sein, aber in der restlichen Welt wird mit CString eben ein String bezeichnet, der ein char* ist. Es geht hier darum, den Unterschied zwischen char* und der Klasse string aus <string> hervor zu heben.

Übrigens ist es völlig egal, wie ein Operator sein Verhalten erreicht, das entscheidene ist, daß sein Verhalten korrekt ist. Und der Operator == liefert zurück, ob die Strings gleich sind oder nicht. Mehr ist nicht entscheidend.

Bis denn dann

Jan

Geschrieben

Wie wär's denn, wenn wir "C-String" sagen, um eine Verwechslung mit der MFC-Klasse auszuschließen. Die Gefahr besteht meiner Meinung nach, weil viele Anfänger die MFC verwenden. Orffi, möchtest du eine Ergänzung für den String-Beitrag schreiben, die std::string behandelt?

Geschrieben

Also das hier geht über die FAQ-Frage noch etwas hinaus:

Auch wenn´s mords aufwändig klingt: Warum dröselt man nicht einfachheitshalber die Programmierforen in C/C++ jeweils in Windows(evtl mehrfach in XP/NT/98)/Unix/Linux/DOS und von der Thematik in Sound/Socket/MFC/STL/ATL/DLL/Grafik/DB oder nochwas auf und evtl. noch tiefer schürfend in DX/OpenGL/GDI/SDL/-Programmierung usw. in Unterforen auf, dann wäre alles getrennt, jeder weiß worum es geht und um zu posten muß man sich selber einsortieren und entscheiden wo die Frage hin gehört. Ein solch breites Spektrum an Foren würde es auch für den Anfänger leichter machen NICHT die Suchfunktion zu verwenden (die ja eh nur klappt, wenn in jedem Thread auch die 100% passenden Triggerwörter angewendet wurden) und zielgesteuerter auf sein Thema hin zu recherchieren. Bisher sieht das C/C++-Forum von der Thematikstreuung doch sehr nach Kraut und Rüben aus. Jedenfalls würden sich die 1001 Frage nach der Plattform, dem Betriebssystem und den verwendeten Compilern, etc. sich somit erübrigen und man kann gezielter auf die Fragen eingehen. Es machen sich eh viel zu wenig den Aufwand jedesmal diese nötigen Infos mit ins Posting zu klatschen.

Wenn das zuviel ist wäres es doch u.U. auch möglich einfach alle Punkte beim Posten aufzulisten (wie die Message Icons) und der Poster kann per Selektion den Themenkreis zur Frage eingrenzen ohne alles selber schreiben zu müssen.

Die FAQs könnten dann einfach wie Ulis Ankündigungs-Post immer an erster Stelle stehen und sollten jederzeit von Mods ergänzt werden können.

Ist zwar nur ein Vorschlag, aber bei so einem breitbandigen Spektrum wie der Programmierung sicherlich sinnvoll und man hätte einige lästige Forums-Fliegen auf einmal zerklatscht.

Geschrieben

Ich habe hier einen kleinen Text geschrieben. Allerdings bin ich der Meinung, daß Guybrush Threepwood, entscheiden sollte, ob er diesen Text so möchte, da

1. ich seinen Text ein wenig verändert habe und

2. es "sein" Thema ist und ich es ihm nicht "wegnehmen" möchte.

Mir ist durchaus bewußt, daß es leichter ist, einen Text zu kritisieren als ihn selber zu verfassen, deswegen sollte mein Initialkommentar kein Angriff auf Guybrush Threepwood sein, sondern nur ein Hinweis.

Lange Vorrede, hier der Text:

In C und C++ hat die Bezeichnung String zwei unterschiedliche Bedeutungen. Deswegen unterscheiden wir zwischen C-String und std::string.

In C werden Strings als array von Character angelegt:

char szString[10]; /*ein C-String*/

reserviert Speicherplatz für einen String mit 9 (Index 0-8) Zeichen, da jeder C-String mit einem '\0' abgeschlossen werden muß. Dies geschieht bei den meisten Funktionen automatisch. Nur wenn man die Zeichen selber festlegt, sollte man daran denken, da sonst Speciherüberläufe auftreten könen.

C-Strings können nicht über den == Operator miteinander verglichen werden, da so nur die Startadressen der Arrays verglichen werden und nicht der Inhalt der Arrays. Um Vergleiche über den Inhalt durchzuführen, gibt es verschiedene Funktionen, z.B. strcmp() aus <string.h>, die in einer C Referenz oder hier auf dem Board nachgelesen werden können.

In C++ kann man selbstverständlich auch die C-Strings verwenden, aber wie aus dem obigen Abschnitt erkennbar ist, ist eine solche Lösung nicht die eleganteste. Deshalb gibt es in den Bibliotheken, die zum ISO-Standard von C++ gehören, die Klasse string aus <string>. Durch Verwendung dieser Klasse vereinfacht sich die Handhabung von Strings. Strings vom Typ std::string kann man z.B. sehr einfach durch den bekannten == Operator vergleichen. Des Weiteren muß bei der Erzeugung eines std::strings nicht die maximale Größe bekannt sein. Die Klasse "kümmert sich darum, daß immer genügend Speicher alloziiert ist. Um von einem std::string einen C-String zu erhalten nutzt man die Funktion c_str(), die in der Klasse string enthalten ist.

Um alle Möglichkeiten der Klasse string kennen zu lernen, empfehlen wir z.B das Kapitel 20 aus "The C++ Programming Language" von Bjarne Stroustrup, die dritte Ausgabe.

Bis denn dann

Jan

Geschrieben

Hallo,

Originally posted by Guybrush Threepwood

Allerdings finde ich deine Erklärung zu allgemein, da man glaube ich damit

immer noch nicht wüßte was genau man jetzt mit diesen Bibliotheken

anstellen soll.

Dann mach doch mal einen Vorschlag, wie man das Thema konkretisieren kann, ohne plattformabhängig zu werden.

Nic

Geschrieben

Halloeloe,

von meiner Seite zunaechst einmal der erinnernde Hinweis, dass dieses Forum Sprachstandards behandelt, nichts anderes sind ja C und C++. Das wuerde ich schon gern so belassen, aus guten Gruenden...

Library-Problematiken usw. fallen in das Forum darueber. Eine FAQ wuerde auch aus den Fugen geraten, wenn man jede Frage noch implemtierungsabhaengig beantworten wollte. (Wenn man das muesste waere genaugenommen die Frage bereits OT.) ;-)

Falls Euch das Implementierungsforum zu unuebersichtlich vorkommt, koennen wir gerne OS- oder compilerspezifische Unterforen bilden, meinethalben auch zweifach geschachtelt, also z. B. Impl.Windows.BorlandBuilder, Impl.Linux.gcc oder auch Impl.etc.etc. Ich kann aber nicht beurteilen, ob der Traffic das rechtfertigen wuerde und sich geeignete Moderatoren finden.

Geschrieben

e@sy hat freundlicherweise die FAQ-Software so eingerichtet, dass wir eine eigene FAQ haben. Damit haben wir jetzt auch die Möglichkeit, Fragen nach Themen zu sortieren.

Link zur FAQ

Ich habe den Header/Library-Beitrag noch nicht eingestellt, weil da offenbar noch Klärungsbedarf besteht. Wie wäre es, wenn nur der Teil über die Header im Standardbereich steht, und für die Libs auf den plattformspezifischen Teil der FAQ verwiesen wird?

Geschrieben
Originally posted by Klotzkopp

Wie wäre es, wenn nur der Teil über die Header im Standardbereich steht, und für die Libs auf den plattformspezifischen Teil der FAQ verwiesen wird?

Halte ich fuer eine saubere Loesung.

Geschrieben

Hallo,

ganz rausnehmen würde ich es aus dem allgemeinen Teil nicht, da das Konzept "Bibliothek" plattformunabhängig ist und beispielsweise für C direkt im Sprachstandard definiert wird (K&R, Anhang B). Wie wäre es mit einer allgemeinen Beschreibung und den entsprechenden Links auf die plattformspezifischen Aspekte?

Nic

Geschrieben
Originally posted by Orffi

Ich habe hier einen kleinen Text geschrieben. Allerdings bin ich der Meinung, daß Guybrush Threepwood, entscheiden sollte, ob er diesen Text so möchte, da

1. ich seinen Text ein wenig verändert habe und

2. es "sein" Thema ist und ich es ihm nicht "wegnehmen" möchte.

Mir ist durchaus bewußt, daß es leichter ist, einen Text zu kritisieren als ihn selber zu verfassen, deswegen sollte mein Initialkommentar kein Angriff auf Guybrush Threepwood sein, sondern nur ein Hinweis.

Ich hätte vielleicht noch nen Smilie setzten sollen:), ich hab deine Kritik

nämlich nicht als Angriff empfunden.

Außerdem ist dein Text wirklich besser, weil er beides erläutert.

Gruß

Guybrush

Geschrieben
Originally posted by nic_power

Hallo,

Dann mach doch mal einen Vorschlag, wie man das Thema konkretisieren kann, ohne plattformabhängig zu werden.

Nic

Wie gesagt, ich weiß nicht wie das auf anderen Platformen ist. Ich würde

den Text halt noch dahingehend erweitern, dass du schreibst das es auch

Funktionen gibt die nicht Standartmäßig gelinkt werden und dass für

diese halt selber die entsprechenden Libs angegeben werden müßen.

Gruß

Guybrush

Geschrieben
Originally posted by Klotzkopp

Ich habe den Header/Library-Beitrag noch nicht eingestellt, weil da offenbar noch Klärungsbedarf besteht. Wie wäre es, wenn nur der Teil über die Header im Standardbereich steht, und für die Libs auf den plattformspezifischen Teil der FAQ verwiesen wird?

Find ich gut

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...