> warum will eigentlich keiner mehr ein C-Buch lesen?
Was ist "lesen"?
> ist es überhaupt möglicht zwei for Schleife zu kombinieren?
Es ist möglich, aber das geht anders:
Text nicht hier posten, sondern im Editor eingeben, Compiler anwerfen,
Fehlermeldungen ansehen, Bescheid wissen, auf die Couch legen,
nachdenken, verschachtelte Schleifen entwerfen, eintippen, Compiler ...,
wenns dann nicht geht: Aufgabenstellung festlegen, neu texten
Allerdings besitzt die Idee einer doppelten Schleife einen gewissen
Charme...
was-willst-du wrote:
> Text nicht hier posten, sondern im Editor eingeben, Compiler anwerfen,> Fehlermeldungen ansehen, Bescheid wissen, auf die Couch legen,> nachdenken, verschachtelte Schleifen entwerfen, eintippen, Compiler ...,> wenns dann nicht geht: Aufgabenstellung festlegen, neu texten
Das nennt man "Lernen" ;-)
gast wrote:
> hallo,> ist es überhaupt möglicht zwei for Schleife zu kombinieren?> for((int i=0;i<5; i++) && for(int j=0;j<5; j++))> {}
Klaro, ei freilich! Lediglich mit ein paar Klammern hier und dort
würzen:
Ist übrigens ANSI-C, also der C-Standard.
Die Funktion liefert WAHR, wenn die Spuren zweier n-dimensionaler
Vektoren x und y beide ungleich Null sind.
Viel Spaß damit ;-)
Johann
Warum haben die meisten C-Freaks eigentlich immer das Bedürfnis,
möglichst unverständlichen und kryptischen Code zu schreiben? Wenn nicht
mindestens drei Operatoren und fünf Klammerverschachtelungen kombiniert
werden, ist's kein anständiges C, oder wie?
> Schade, VC++ kann kein ANSI-C:>> D:\....\Dreizeiler.cpp(32) : error (...)> D:\....\Dreizeiler.cpp(32) : error (...)
Doch, nur übersetzt VCC C++-Quelltext als C++. Du musst schon darauf
achten, wie Du Deine Dateien nennst.
Tip: C-Quelltext findet sich in Dateien mit der Extension *.c
foo.c:5: warning: ISO C forbids braced-groups within expressions
4
foo.c:5: warning: ISO C forbids braced-groups within expressions
Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers
zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,
dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass
es standardgerecht wäre.
Übrigens beschleicht mich bei jedem, der auf ,,ANSI C'' dieser Tage
(als Begriff) noch herumreitet, immer stillschweigend das Gefühl,
dass die Leute die Zeit verschlafen haben... Der aktuelle Standard
heißt ISO/IEC 9899:1999, oder kurz ,,C99''.
Rufus t. Firefly wrote:
> Doch, nur übersetzt VCC C++-Quelltext als C++. Du musst schon darauf> achten, wie Du Deine Dateien nennst.> Tip: C-Quelltext findet sich in Dateien mit der Extension *.c
Hilft alles nix, für VC++ bleibt diese Zeile fehlerhaft:
> gcc zum Bleistift....
Sollte nicht wenigstens ein zweiter Compiler so einen
Sourcecodeschnipsel noch übersetzt bekommen? :-/
> Dann wäre da nur noch die Frage, wie bei einem Dreizeiler> ein Fehler in Zeile 32 auftreten kann... :)
Dieser Dreizeiler muß für alle Versuche herhalten, und offenbar sind das
schon ein paar... ;-)
Jörg Wunsch wrote:
> Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers> zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,> dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass> es standardgerecht wäre.
Ich hab nix gesagt und behaupte das Gegenteil >_>
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62
Ist dann eindeutig eine Funktion des GCC. Schade eigentlich...
> Übrigens beschleicht mich bei jedem, der auf ,,ANSI C'' dieser Tage> (als Begriff) noch herumreitet, immer stillschweigend das Gefühl,> dass die Leute die Zeit verschlafen haben... Der aktuelle Standard> heißt ISO/IEC 9899:1999, oder kurz ,,C99''.
Da ist was Wahres dran --
> foo.c:5: warning: ISO C forbids braced-groups within expressions
4
> foo.c:5: warning: ISO C forbids braced-groups within expressions
5
>
>> Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers> zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,> dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass> es standardgerecht wäre.
Zunächst mal war die Zeile als Scherz gedacht, weil sie in etwa die
Zeichenfolge des OP "for && for" enthält.
Zum anderen geht das ohne -pedantic in gcc:
> % gcc -c -std=c99 -ansi foo.c
ebenso wie
> % gcc -c -std=c89 -ansi foo.c
Wenn ich sowas einem Compiler vorsetze und es ist nicht
standardkonform, dann hat er IMHO auch zu meckern. Auch ohne -pedantic,
und auch ohne -Wblabla.
> % gcc -v --help | grep c99> % -std=c99 Conform to the ISO 1999 C standard
Johann
Johann L. wrote:
> Zum anderen geht das ohne -pedantic in gcc:>>> % gcc -c -std=c99 -ansi foo.c> ebenso wie>> % gcc -c -std=c89 -ansi foo.c>> Wenn ich sowas einem Compiler vorsetze und es ist /nicht/> standardkonform, dann hat er IMHO auch zu meckern.
Nein, hat er nicht. Das obliegt ganz alleine dem Compiler und dem
Benutzer, die Warnungen darzustellen. Und mit -pedantic zeigt er sie dir
ja auch. Mit -ansi und -std=c99 hast du das noch nicht erreicht, s.u.
> Auch ohne -pedantic,> und auch ohne -Wblabla.>> % gcc -v --help | grep c99>> % -std=c99 Conform to the ISO 1999 C standard
Und das ist dann wiederum Käse, weil da noch mehr zu steht:
1
The compiler can accept several base standards, such as c89 or
2
c++98, and GNU dialects of those standards, such as gnu89 or
3
gnu++98. By specifing a base standard, the compiler will accept
4
all programs following that standard and those using GNU extensions
5
that do not contradict it. For example, -std=c89 turns off certain
6
features of GCC that are incompatible with ISO C90, such as the
7
"asm" and "typeof" keywords, but not other GNU extensions that do
8
not have a meaning in ISO C90, such as omitting the middle term of
Bernd Klier wrote:
> um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der> OP meinte vielleicht:>>
1
for(i=0,j=0;i<5&&j<5;i++,j++)
>> zumindest hab ich es so verstanden, die verschachtelte Lösung ergibt ja> doch ein leicht anderes Ergebnis ;)
Das ist aber eigentlich ziemlich unsinnig. Wozu sollten zwei Variablen
simultan hochgezählt werden?
Die Variante von Lothar vom 23.02., 15:55 macht am meisten Sinn. Das ist
nämlich eine echte Verschachtelung, Deine Version aber nicht.
Ich habe ja nicht nach der Sinnhaftigkeit des OP gefragt, natürlich ist
simultanes Hochzählen unsinnig.
Es lassen sich jedoch beliebig viele Permutationen von Abbruchkriterien
etc. finden, bei denen "meine" Lösung einen Sinn ergibt.
("Sinn machen" ist unsinnig)
Was der OP nun wirklich wollte, kann nur er uns mitteilen.
Sven P. wrote:
> Johann L. wrote:>> Zum anderen geht das ohne -pedantic in gcc:>>>>> % gcc -c -std=c99 -ansi foo.c>> ebenso wie>>> % gcc -c -std=c89 -ansi foo.c>>>> Wenn ich sowas einem Compiler vorsetze und es ist /nicht/>> standardkonform, dann hat er IMHO auch zu meckern.> Nein, hat er nicht. Das obliegt ganz alleine dem Compiler und dem> Benutzer, die Warnungen darzustellen. Und mit -pedantic zeigt er sie dir> ja auch. Mit -ansi und -std=c99 hast du das noch nicht erreicht, s.u.>>> Auch ohne -pedantic,>> und auch ohne -Wblabla.>>> % gcc -v --help | grep c99>>> % -std=c99 Conform to the ISO 1999 C standard> Und das ist dann wiederum Käse, weil da noch mehr zu steht:> [pre]> The compiler can accept several base standards, such as c89 or
...
Nein, bei der Ausgabe steht nichh mehr da. Es steht genau eine Zeile da,
ebenso bei -std=iso9899:1999 (gcc 4.3.2 und gcc 4.1.0)
Was nutzt denn ein Standard, wenn der Compiler irgendeine Obermenge
davon implementiert?
> [...] Das obliegt ganz alleine dem Compiler und dem> Benutzer, die Warnungen darzustellen.
NACK. Das ist ok für Warnungen wie fehlende Prototypen,
signed-unsigned-Vergleiche, etc. Aber nicht, wenn ein eingestellter
Sprachstandard nicht befolgt wird.
Wenn man solche Features gerne hätte, dann bitte mit -std=gnu99 oder von
mir aus auch als Default ohne -std=, aber nicht wenn explizit
Konformität zu einem bestimmten Standard gefordert ist. Offenbar steht's
nicht in der ISO 9899:1999 drin, und dann gehört auch gemeckert, wenn
die Quelle dem nicht entspricht und -std=c99 gesagt ist.
Johann
Johann L. wrote:
> ...> Nein, bei der Ausgabe steht nichh mehr da. Es steht genau eine Zeile da,> ebenso bei -std=iso9899:1999 (gcc 4.3.2 und gcc 4.1.0)
Dann les doch bitte die Manpage genau durch, anstatt nur grob drauf rum
zu greppen.
> Was nutzt denn ein Standard, wenn der Compiler irgendeine Obermenge> davon implementiert?
Garnix, schon recht. Aber er implementiert ja nicht nur irgendeine
Obermenge davon.
>> [...] Das obliegt ganz alleine dem Compiler und dem>> Benutzer, die Warnungen darzustellen.>> NACK. Das ist ok für Warnungen wie fehlende Prototypen,> signed-unsigned-Vergleiche, etc.
Jo.
> Aber nicht, wenn ein eingestellter> Sprachstandard nicht befolgt wird.
Dann stell doch bitte auch den Standard ein.
> Wenn man solche Features gerne hätte, dann bitte mit -std=gnu99 oder von> mir aus auch als Default ohne -std=, aber nicht wenn explizit> Konformität zu einem bestimmten Standard gefordert ist.
Du hast mit -std=c99 NICHT explizit Konformität gefordert. In der
Manpage steht haarklein, was womit gefordert wird, und mit c99 wird
der C99-Standard PLUS Gnu-Erweiterungen, die nicht damit in Konflikt
stehen, gefordert. Basta.
> Offenbar steht's> nicht in der ISO 9899:1999 drin, und dann gehört auch gemeckert, wenn> die Quelle dem nicht entspricht und -std=c99 gesagt ist.
s.o.
Du darfst dem GCC aufgrund deiner Bedienfehler keinen Vorwurf machen.
Korrekte Bedienung des GCC erfordert in dem Fall halt -pedantic. Frag
mich nicht warum und wieso, aber es ist halt so.
1
-pedantic
2
Issue all the warnings demanded by strict ISO C and ISO C++; reject
3
all programs that use forbidden extensions, and some other programs
4
that do not follow ISO C and ISO C++. For ISO C, follows the ver‐
5
sion of the ISO C standard specified by any -std option used.
>>>> zumindest hab ich es so verstanden, die verschachtelte Lösung ergibt ja>> doch ein leicht anderes Ergebnis ;)> Das ist aber eigentlich ziemlich unsinnig. Wozu sollten zwei Variablen> simultan hochgezählt werden?
Ohne größeren Quellcode-Ausschnitt kann niemand diese Frage beantworten,
i und j können ja innerhalb der Schleifen weiter verändert werden. Ob
das nun sinnvoll ist, kann ich ohne Sinn Zweck des Quellcodes nicht
wissen.
Im übrigen verweise ich dann nochmal auf diesen Satz:
> Und warum will eigentlich keiner mehr ein C-Buch lesen?
Warum auch, man bekommt ja die Antwort, dass das Lesen mehr bringt,
steht
auf einem ganz anderen Blatt...
Bernd Klier wrote:
> Ich habe ja nicht nach der Sinnhaftigkeit des OP gefragt, natürlich ist> simultanes Hochzählen unsinnig.> Es lassen sich jedoch beliebig viele Permutationen von Abbruchkriterien> etc. finden, bei denen "meine" Lösung einen Sinn ergibt.> ("Sinn machen" ist unsinnig)> Was der OP nun wirklich wollte, kann nur er uns mitteilen.
Im Prinzip schon richtig. Nur darfst du nicht davon ausgehen, dass
Anfänger ihre Fragen gut durchdenken. In ~90% der Fälle ist die Antwort,
die am meisten Sinn macht auch die Antwort auf die Frage, die der Frager
zwar so nicht gestellt hat, aber eigentlich fragen wollte :-)
> ist es überhaupt möglicht zwei for Schleife zu kombinieren?> for((int i=0;i<5; i++) && for(int j=0;j<5; j++))> {}
Von einem Anfänger gefragt, ist die wahrscheinlichste Interpretation der
Frage die:
Ist es möglich ein Konstrukt zu finden, so dass im Schleifenkörper alle
Kombinationen für i = 0 bis 4 und j = 0 bis 4 auftreten.