Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

c scripte

Brigitte Woort / 4 Antworten / Baumansicht Nickles

Hallo, warum sind die c scripte so unterschiedlich? Ich habe nach einem Anfänger Beispiel gesucht  'Hallo Welt'  Bisher hat  eine Variante funktoniert, wenn ich <sdio.h> wegslasse.


getest mit turbo c unter Windows


bei gcc unter Linux hatte ich syntaxfehler aufällig war das sie sich fast immer  auf  den Inhalt von 'int  main' bezogen


Muss ich für den jeweiligen compiler die passenden Scripte wählen?

bei Antwort benachrichtigen
Zaphod Brigitte Woort „c scripte“
Optionen

1. Es gibt keine c-Scripte. Was du meinst sind Quelltexte.
2. Welche Fehler kriegst du?
3. Linux und Windows benutzen unterschiedliche Zeichen für die Zeilenendung - erstelle den Quelltext unter dem System, unter dem du ihn verwenden willst.
4. Lies die Dokumentation
HTH, Z.

bei Antwort benachrichtigen
vergisses Brigitte Woort „c scripte“
Optionen

Hallo Brigitte,

warum redest Du immer von C Scripten ?
C ist eine Programmiersprache, deren Quelltexte (Sourcen) mit dem Compiler zu Objektdateien kompiliert werden und dann mit dem Linking/Loader (allg. auch Linker genannt) zusammen mit Laufzeitbibliotheken und anderen Bibliotheken/ Objektdateien
zu einem lauffähigen Programm (executable) gebunden (gelinkt) werden.
Das nennt man Kompilierzeit (Compiletime).
Wenn man das fertige Programm (Kompilat) dann ausführt, nennt man das Laufzeit.

Bei Scriptsprachen handelt es sich im Gegensatz dazu um Interpretersprachen, deren Quelltexte nicht kompiliert werden, sondern zur Laufzeit häppchenweise eingelesen, untersucht (interpretiert) und ausgeführt werden.
Natürlich gibt es auch zu einigen Scriptsprachen entsprechende Compiler, aber die sind dann meistens später dazu gekommen und verhalten sich in Details auch etwas anders als die Interpreter.

Jetzt aber zu Deinem Problem:

Für das Verständnis ist es hilfreich, wenn man etwas den "geschichtlichen" Hintergrund kennt.

In den ersten Versionen der C Compiler (z. K&R Zeiten) hatten die C Programmierer sehr viele Freiheiten, so wurde z. B. die Typsicherheit der Sprache sehr lasch gehandhabt.
Das ermöglichte unter Anderem auch die sogenannte Trickprogrammierung, wo man Eigenheiten des Prozessors bzw. des Compilers für diverse Tricks ausnutzte und auf diese Weise weniger Quelltext schreiben musste.
(Und auch zeigen konnte, was für ein Guru man war ;-)

Leider führte das auch zu einem Wildwuchs von schwer lesbaren Programmen,
(man konnte einen Programmierer an seinem Stil erkennen ;-)
es war oft nicht portabel und die Ursache für schwer zu findende Fehler.

Bei der Weiterentwicklung von C hat man aus diesen Gründen nicht nur neue Features eingebaut, sondern auch Mechanismen für bessere, lesbarere, stabilere und fehlerärmere Programmierung entwickelt, die dann später in einer Norm ( ANSI C ) zusammengefasst wurden.

Jede C Funktion hat eine Signatur.
Das ist der Name der Funktion, die übergebenen Parameter mit deren Datentypen und der Return Datentyp der Funktion.

Unter ANSI C müssen alle Funktionen erst mal deklariert werden (Funktionsprototyp), bevor sie verwendet werden dürfen. (Typsicherheit) Das gilt auch für main().

Die meisten modernen Compiler können ANSI C, erlauben aber auch noch die Programmierung im "alten Stil".

Vermutlich ist bei turbo c in der Standardeinstellung ANSI C nicht aktiviert und erlaubt deshalb eine nicht deklarierte Verwendung von main().
Dann solltest Du am Besten mal den entsprechenden Konfigurationsschalter in der Entwicklungsumgebung auf ANSI einstellen.

Hope that helps.

Gruss, vergisses

bei Antwort benachrichtigen
Brigitte Woort Nachtrag zu: „c scripte“
Optionen

Hallo
habe mich Heute noch mal mit den Anfängerproblemen auseinandergesetzt.

Beim Compiler 'Turbo C' liegt es wohl an einer include Einstellung des Compilers die ich noch einstellen muss.

Bei gcc funkionierten nun auch einige Beispiele
allerdings nicht mit > void main(void)
ist aber oft durch > int main (int..) zu ersetzen

Allgemein habe ich noch mal eine Frage, wegen der genannten Trickprogrammierung, wo man Eigenheiten des Prozessors einbindet.
Kann es ein Unterschied in der C Funktion machen, ob ein Pentium oder AMD Prozessor im Einsatz ist.

Hat die C Programmierung für G 3 Prozessoren eine andere Basis?

Gruss Gitte

bei Antwort benachrichtigen
vergisses Brigitte Woort „c scripte“
Optionen

Hallo Brigitte,

Erst mal eine kurze Anmerkung:
C gibt es seit ca. 1972 und läuft auf diversen verschiedenen Prozessorenfamilien.
Die Microsoft- bzw. Intel Welt ist nur eine davon.

Nun zu der Prozessorenabhängigkeit in der Programmierung:

Je nach Prozessor unterscheidet sich die Speicherorganisation.
Das spielt dann eine Rolle, wenn man Daten auf Bitebene manipuliert.

Die kleinste Informationseinheit ist das Bit mit 2 möglichen Zuständen.
Die nächstgrößere Informationseinheit ist das Byte mit 8 Bit.
Bis hierhin ist alles ja noch ganz einfach, da die logische Speichereinheit mit der physikalischen übereinstimmt.

Da man mit einem Byte nur 256 verschiedene Zustände darstellen kann, was für den Bedarf nicht ausreicht, hat man 2 Bytes zu einem Wort bzw. 2 Wörter zu einem Doppelwort als logische Speichereinheit zusammengefasst.
Nun stellt sich das Problem der Priorität:
Welches der beiden Bytes ist das Höherwertige ?
Leider wurde diese Frage je nach Prozessorenhersteller unterschiedlich gelöst.
Mal war es das 2. Byte das Höherwertige (Most significant Byte), mal war es das 1. Byte.
Das waren dann die Little Endians (wie z. B. Intel) bzw. die Big Endians (wie z. B. Motorola).

siehe auch: http://www.cs.umass.edu/~verts/cs32/endian.html

Zur Vereinfachung der Programmierarbeit wurden dann diverse Präprozessor Makros entwickelt, die den Zugriff auf die Bits kapseln sollen und damit eine einheitlichere logische Sicht auf Bits und Bytes ermöglichen. Diese Makros sind allerdings immer mit Vorsicht zu genießen !

Da Du offensichtlich gerade erst mit der C Programmierung anfängst, sollten derartige Bitmanipulationen im Moment noch keine große Rolle spielen und Du solltest Dich deshalb noch nicht allzu sehr damit befassen.
Im fortgeschrittenen Statium kommst Du allerdings nicht mehr daran vorbei ;-)

Zur Trickprogrammierung:
ANSI C schränkt die Möglichkeiten zur Trickprogrammierung ein, verhindert sie aber nicht.
So kann man z. B. Unions zum Vermatschen von Daten mißbrauchen.
Weiter will ich an dieser Stelle gar nicht darauf eingehen, je weniger Du davon weißt, umso besser ist es für Deinen Programmierstil.


Gruss, vergisses

bei Antwort benachrichtigen