Das ich bislang mit Pascal programmiert habe...ist ja jetzt nicht so
wichtig..nur hatte ich da irgendwie weniger fragen...
Wieso lautet es bei Visual C
1
int _tmain(int argc, _TCHAR* argv[])
2
{
3
return 0;
heißt es bei den unzähligen anderen Kompilern auch wieder andauernd
anders?!
Nutze ich das übliche int main();
stimmt der Exitcode nicht...zumindest ist er nicht 0...
Tanja schrieb:> heißt es bei den unzähligen anderen Kompilern auch wieder andauernd> anders?!
eigentlich nicht.
> Nutze ich das übliche int main();
ist auch ok, beides ist zulässsig
> stimmt der Exitcode nicht...zumindest ist er nicht 0...
was meinst du damit?
Tanja schrieb:> Das ich bislang mit Pascal programmiert habe...ist ja jetzt nicht> so> wichtig..nur hatte ich da irgendwie weniger fragen...>> Wieso lautet es bei Visual C int _tmain(int argc, _TCHAR* argv[])> {> return 0;>> heißt es bei den unzähligen anderen Kompilern auch wieder andauernd> anders?!> Nutze ich das übliche int main();> stimmt der Exitcode nicht...zumindest ist er nicht 0...
Ich versteh dein Problem nicht so ganz.
Ein C Programm ist normalerweise so aufgebaut:
1
intmain(){// () Deklariert nichts.
2
3
printf("\nHallo Welt!\n");
4
return0;// Return Anweisung beendet das Programm (0 = Return Wert)
5
6
}
Wenn du Kommandozeilen Parameter nutzen magst:
1
intmain(intargc,char*argv[]){// int argc enthält die Anzahl der vom Betriebssystem übergebenen Parameter (Erster Parameter ist immer der Programmpfad! ; Der Pointer argv enthält die Parameter als string.
2
3
intx=1;
4
5
printf("\nProgrammpfad: %s\n",argv[0]);
6
7
for(x=1;x<=argc;x++){
8
printf("\n%d. Parameter: %s",x,argv[x]);
9
}
10
11
return0;
12
}
Beachte: Visual C ist kein C! Visual C ist eine proprietäre Microsoft
Erweiterung von C++. C++ ist eine sehr weit verbreitete
Programmiersprache die auf der ebenfalls sehr weit verbreiteten
Programmiersprache C aufsetzt.
C und C++ sind der quasi Standard in der Entwicklung von Hardware Nahen
Programmen, aber auch super für die Entwicklung von normalen
Betriebssystemanwendungen.
Visual C ist eine erweiterte Form von C++ und basiert auf dem .NET
Framework.
Ich empfehle dir erst C und bei Bedarf C++ zu lernen.
Viele Grüße
pelzfrucht
pelzfrucht schrieb:> Visual C ist eine erweiterte Form von C++ und basiert auf dem .NET> Framework.
das ist Unsinn. Du meinst vermutlich Visual C++.
Visual C ist einfach C mit dem Visual Studio. Es ist also normales C.
Bei CLI/C++ gibt es so merkwürdige ^ statt den Stern. So sieht der code
meines Wissens nicht aus.
ok..warum geht das jetzt wieder nicht?!?
[coder]#include "stdafx.h"
#include "stdio.h"
char antwort[20];
int zahl1, zahl2;
int main()
{
puts("Hallo Sven");
printf("gib bitte die erste zu addierende Zahl ein: ");
scanf("%i",&zahl1);
printf("nun die zweite zu addierende Zahl: ");
scanf("%i",&zahl2);
printf("Das Ergebnis lautet %i",&zahl1 + &zahl2);
getchar();getchar();
return 0;
}[/code]
er fasselt was von, ich könnte keine zwei Zeiger addieren?!?!
Warum sind denn zahl1 und 2 jetzt Zeiger?!
Tanja schrieb:> ach hat sich erledigt..& darf nicht vor zahl1 stehen..hmpf
Im printf darf das auch nicht vor zahl2 stehen, sonst addierst du zahl1
zur Adresse von zahl2 und das ist ja nicht das, was du machen willst.
Mit dem & greifst du nicht auf den Speicherinhalt zu sondern auf die
Speicheradresse. ;)
Tanja schrieb:> er fasselt was von, ich könnte keine zwei Zeiger addieren?!?!> Warum sind denn zahl1 und 2 jetzt Zeiger?!
printf("Das Ergebnis lautet %i",&zahl1 + &zahl2);
muss heißen
printf("Das Ergebnis lautet %i",(zahl1 + zahl2));
Andererseits gibt es auch einen Überlauf, wenn zahl1 + zahl2 den
Wertebereich von int übersteigen. %i bezeichnet einen int, somit wird
printf nicht richtig funktionieren.
Du liest vielleicht besser erstmal ein C Buch.
Peter II schrieb:> das ist Unsinn. Du meinst vermutlich Visual C++.>> Visual C ist einfach C mit dem Visual Studio. Es ist also normales C.> Bei CLI/C++ gibt es so merkwürdige ^ statt den Stern.
Sorry. Kann sein. Dann hab ich mich getäuscht..
Eherlich gesagt hab ich von Visual C noch nie gehört. Hatte die Info
deshalb gegoogelt.
Ist Visual C nur ein Eigenname von Microsoft für C?
Ist mir so noch nie aufgefallen. Allerdings les ich mir das auch nicht
soo genau durch beim Projekt erstellen. Ich füll aus was er wissen will
und damit bin ich durch.
Naja. Auf alle Fälle ist verwirrend was Sie schreibt.
Im Titel redet Sie von normalen C, im Text erwähnt Sie seltsamerweise
(das mir unbekannte) Visual C. Dann schreibt Sie eine (für Anfänger in
C) verzogene main Deklaration die zwar beginnt ({) aber nicht mehr endet
( } fehlt)
> So sieht der code meines Wissens nicht aus.
C sieht eindeutig so aus wie ich es schrieb.
Visual C dann höchstwahrscheinlich anders.
Da Sie schreibt
> Wieso lautet es bei Visual C [...]> heißt es bei den unzähligen anderen Kompilern [...]
Vermute ich eher dass Sie verschiedene Sprach Syntax vertauscht.
Ob ich GCC, den Visual Studio Compiler oder meine Kristallkugel
verwende.
Bei der gleichen Sprache kommt (sofern ich mich im standardisierten
Bereich bewege) überall das selbe raus.
Viele Grüße
Alexander
PS: Sorry. Hatte einen falschen Nutzernamen verwendet. pelzfrucht ist
ein anderes Forum ;)
Alexander schrieb:> Ist Visual C nur ein Eigenname von Microsoft für C?
mehr oder weniger, es gibt halt eine GUI Editor womit man "Visuell" eine
GUI erstellen kann. Das geht dann mit MFC.
Tanja schrieb:> ach hat sich erledigt..& darf nicht vor zahl1 stehen..hmpf
Bitte besorge Dir ein gutes Buch über die Programmiersprache "C". Die
ist nicht selbsterklärend.
lol..wie fertig seit ihr eigentlich...was meint ihr wohl warum ich
frage..weil ich das Buch gerade durcharbeite und ein Forum als Hilfe
dazu nutze....
solche dämlichen Kommentare sind echt fürn Arsch gute Nacht
Tanja schrieb:> lol..wie fertig seit ihr eigentlich...was meint ihr wohl warum ich> frage..weil ich das Buch gerade durcharbeite und ein Forum als Hilfe> dazu nutze....> solche dämlichen Kommentare sind echt fürn Arsch gute Nacht
Kein Hallo,
Mal nicht so Frech.
Dein Kommentar ist für den Arsch.
Wir geben dir einen gut gemeinten Rat und du reagierst so.
Deine Fragestellung lässt keinesfalls dadrauf schließen dass du ein
Buch verwendet. Vorallem wenn du solch einen Humbug in deine Frage
schreibst (Die Sprache heißt C, nicht Visual C. Visual C ist (wie Peter
II erklärte) ein Microsoft Name mit nem GUI Builder). Dann ist deine
main Funktion für einen Anfänger ebenfalls völlig wirr, und das du
nichtmal
weißt das & bei deinem aktuellen Kentnissstand nur bei scanf erfoderlich
ist*
Das steht sogar in Kapitel 1 des von mir genannten Buch.
Darf ich fragen was für ein Kack Buch du verwendest das solche
Fragen auffwirft?
Keine Grüße.
* Solange du noch nicht bei den Pointern angekommen bist. (Für den
Anfänger kann man das so stehen lassen, oder?)
Alexander schrieb:> Ist Visual C nur ein Eigenname von Microsoft für C?
Nein. Das Produkt "Visual C++" ist eine Sammlung gleich mehrerer
Compiler.
Enthalten ist ein C-Compiler (der allerdings "nur" C89 versteht), ein
C++-Compiler (der dem jeweils aktuellen ISO-C++-Standard nur wenig
hinterherhinkt und seit einigen Versionen als durchaus vorzüglich
anzusehen ist) und ein Compiler für das .Net-Geraffel.
Das nennt sich dann "C++/CLI" oder "Managed C++" und hat mit C++ vom
Namen abgesehen nicht mehr viel zu tun. Das Ding lässt sich nur mit dem
.Net-Kram verwenden.
Die beiden anderen Compiler aber sind brauchbare standardkonforme
Werkzeuge. Probleme gibt es bei C, da der C-Compiler gegenüber dem
C89-Standard nur sehr behutsam erweitert wurde und insbesondere kein
C99 versteht.
Um C programmieren zu lernen, ist es aber auch nicht erforderlich, C99
zu verwenden; C89 ist nicht falsch, es ist halt nur ein Subset von C99,
und C89-Code compiliert auch mit C99-Compilern ohne größere Probleme.
Welcher Compiler verwendet wird, wird beim Erstellen eines Projektes
festgelegt. Zwischen C und C++ wird durch den verwendeten Dateinamen der
Quelltexte unterschieden - C++ verwendet ".cpp", C hingegen ".c".
Rufus Τ. F. schrieb:> Um C programmieren zu lernen, ist es aber auch nicht erforderlich, C99> zu verwenden; C89 ist nicht falsch, es ist halt nur ein Subset von C99,> und C89-Code compiliert auch mit C99-Compilern ohne größere Probleme.
Das ist schon richtig. Nur sind mittlerweile seit dem C99-Standard so
viele Jahre vergangen, dass es einfach nur peinlich ist dass Microsoft
diesen nicht unterstützt.
"Deine Fragestellung lässt keinesfalls dadrauf schließen dass du ein
Buch verwendet."
Du bist ja echt der Knaller!
Was spielt es denn für eine Rolle ob ich es aus einem Tutorial, durch
probieren oder einem Buch lerne?!?
Muss ich das hier vorher bekannt geben?!?
ich bin hier raus
Tanja schrieb:> Du bist ja echt der Knaller!> Was spielt es denn für eine Rolle ob ich es aus einem Tutorial, durch> probieren oder einem Buch lerne?!?> Muss ich das hier vorher bekannt geben?!?
Ganz einfach, du stiehlst die Zeit der Leser, wenn keine adäquate
Eigeninitiative gezeigt wird und da hilft es dir auch nichts dir einen
weiblichen Nicknamen zu wählen.
Mark B. schrieb:> dass es einfach nur peinlich ist dass Microsoft diesen nicht> unterstützt.
Ja. Ein bisschen haben sie sich in der Zwischenzeit bewegt, aber das
generelle Statement ist, daß wer C99 will, doch einfach C++ verwenden
soll.
Das ist auch eher peinlich.
Nun regt Euch doch mal nicht so auf. Natürlich ist für einen erfahrenen
C-Programmierer der &-Operator völlig offensichtlich, aber das muß ein
Anfänger auch erstmal verinnerlichen.
Zumal es auch zum Einstieg nicht offensichtlich ist, wieso die API für
Ein- und Ausgabe da uneinheitlich ist. Der Grund ist natürlich, daß man
bei einer Funktion ohne & sofort sieht, daß die Werte by value und nicht
by reference übergeben werden und deswegen auch garantiert nicht
verändert werden.
@ Tanja: Gewöhn Dich übrigens besser gar nicht erst zu sehr an scanf,
das Ding ist eine tickende Zeitbombe. Ganz besonders beim Einlesen von
Strings, weil Du scanf nicht sagen kannst, wie lang der Buffer des
Strings eigentlich ist.
Eine mögliche portable und sichere Methode geht so:
- den String mit getline einlesen. Da wird auch die Bufferlänge
angegeben.
- danach mit sscanf (string scan formatted) den gerade eingelesenen
String parsen.
Rufus Τ. F. schrieb:> Die beiden anderen Compiler aber sind brauchbare standardkonforme> Werkzeuge. Probleme gibt es bei C, da der C-Compiler gegenüber dem> C89-Standard nur sehr behutsam erweitert wurde und insbesondere kein> C99 versteht.
C89 ist kein Standard. Es hat mit Erscheinen von C99 aufgehört, einer zu
sein.
(genau genommen müßte es "Norm" heißen, nicht "Standard")
Tanja schrieb:> "Deine Fragestellung lässt keinesfalls dadrauf schließen dass du ein> Buch verwendet.">> Du bist ja echt der Knaller!> Was spielt es denn für eine Rolle ob ich es aus einem Tutorial, durch> probieren oder einem Buch lerne?!?
Das spielt eigentlich keine Rolle. Wenn das aber solche Fragen aufwirft,
wie die, die du stellst, muss es schon selten schlecht sein. Also musst
du dir ein besseres suchen. Die Fragen haben vermuten lassen, dass du
gar keins verwendest.
> ich bin hier raus
Bei dem unfreundlichen Ton ist das vielleicht auch besser.
Nop schrieb:> @ Tanja: Gewöhn Dich übrigens besser gar nicht erst zu sehr an scanf,> das Ding ist eine tickende Zeitbombe. Ganz besonders beim Einlesen von> Strings, weil Du scanf nicht sagen kannst, wie lang der Buffer des> Strings eigentlich ist.
Doch, kann man. scanf bietet die Möglichkeit, die maximale Feldlänge
beim Einlesen von Strings zu begrenzen.
Tanja schrieb:> Das ich bislang mit Pascal programmiert habe...ist ja jetzt nicht so> wichtig..nur hatte ich da irgendwie weniger fragen...>> Wieso lautet es bei Visual C>
1
> int _tmain(int argc, _TCHAR* argv[])
2
> {
3
> return 0;
4
>
Weil es in dieser Umgebung Programme mit ANSI- oder Unicode-Zeichen
gibt.
Alle Funktionen mit "_t", Typen mit "_T" am Anfang, werden, abhängig von
einem Define, in den Header-Files auf die entsprechende
"Charactersize"-Version umbenannt. Aus _tmain() wird dann main(), aus
_TCHAR wird CHAR (was wieder irgendwo zu char wird). Zumindest war das
vor 15 Jahren so, alsich noch VC benutzte.
Damit kann man mit einer Source (ansatzweise) beide
Character-Geschmacksrichtungen erzeugen. Borland hat das, glaube ich
mich zu erinnern, genau so getan.
> heißt es bei den unzähligen anderen Kompilern auch wieder andauernd> anders?!> Nutze ich das übliche int main();> stimmt der Exitcode nicht...zumindest ist er nicht 0...
Na ja, wenn main() benutzt wird (warum auch immer die crt0 beide main's
ruft), dann darf ein Unicode-Build sich komisch verhalten.
Also mein Tip: bleib bei dem, was in deinem Compiler-Handbuch steht.
Oder, wie schon mehrfach genannt: Mach einen Upgrade zu einem
Vernünftigem.