mikrocontroller.net

Forum: Compiler & IDEs For schleife kombinieren


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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++))
{}

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll das sein?

Und warum will eigentlich keiner mehr ein C-Buch lesen?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag lieber was du von der Kombination erwartest.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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:
for(int i=0; i<5; i++) {
  for(int j=0; j<5; j++) {
     ....
  }
}

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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"   ;-)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
int trace (int x[], int y[], int n)
{
    int i, s;

    return ({for (i=s=0; i<n; i++) s+=*x++; s;}) && ({for (i=s=0; i<n; i++) s+=*y++; s;});
}

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Johann L.:
> Ist übrigens ANSI-C, also der C-Standard.
Schade, VC++ kann kein ANSI-C:
D:\....\Dreizeiler.cpp(32) : error C2143: syntax error : missing ')' before '{'
D:\....\Dreizeiler.cpp(32) : error C2059: syntax error : ')'
Mit welchem Compiler geht das durch?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit jedem Ansi-C-Compiler, gcc zum Bleistift.

Autor: Andreas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. wrote:
> Mit jedem Ansi-C-Compiler, gcc zum Bleistift.
% gcc -Os -c -std=c99 -Wall -Wextra -pedantic foo.c
foo.c: In function `trace':
foo.c:5: warning: ISO C forbids braced-groups within expressions
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''.

Autor: Andreas Vogt (tico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:
> Schade, VC++ kann kein ANSI-C:
>
> D:\....\Dreizeiler.cpp(32) : error C2143: syntax error : missing ')'
> before '{'
> D:\....\Dreizeiler.cpp(32) : error C2059: syntax error : ')'
> 

Dann wäre da nur noch die Frage, wie bei einem Dreizeiler ein Fehler in 
Zeile 32 auftreten kann...
:)

Gruss
Andreas

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
d:\...\dreizeiler.c(18) : error C2059: syntax error : '{'
d:\...\dreizeiler.c(18) : warning C4552: '<' : operator has no effect; expected operator with side-effect
d:\...\dreizeiler.c(18) : error C2143: syntax error : missing ';' before ')'
d:\...\dreizeiler.c(18) : error C2059: syntax error : ')'
d:\...\dreizeiler.c(18) : error C2059: syntax error : '&&'
d:\...\dreizeiler.c(18) : error C2059: syntax error : ')'

> 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... ;-)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 --

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Sven P. wrote:
>> Mit jedem Ansi-C-Compiler, gcc zum Bleistift.
>
>
> % gcc -Os -c -std=c99 -Wall -Wextra -pedantic foo.c
> foo.c: In function `trace':
> foo.c:5: warning: ISO C forbids braced-groups within expressions
> 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.

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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
The compiler can accept several base standards, such as c89 or
c++98, and GNU dialects of those standards, such as gnu89 or
gnu++98.  By specifing a base standard, the compiler will accept
all programs following that standard and those using GNU extensions
that do not contradict it.  For example, -std=c89 turns off certain
features of GCC that are incompatible with ISO C90, such as the
"asm" and "typeof" keywords, but not other GNU extensions that do
not have a meaning in ISO C90, such as omitting the middle term of
a "?:" expression.

Autor: Bernd Klier (bem) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ihr,

um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der 
OP meinte vielleicht:
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 ;)

Grüsse

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Klier wrote:
> Hi ihr,
>
> um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der
> OP meinte vielleicht:
>
>
for(i=0, j=0; i < 5 && j < 5; i++, j++)
Macht das denn Sinn?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Klier wrote:
> um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der
> OP meinte vielleicht:
>
>
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.

Autor: Bernd Klier (bem) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C++; reject
all programs that use forbidden extensions, and some other programs
that do not follow ISO C and ISO C++.  For ISO C, follows the ver‐
sion of the ISO C standard specified by any -std option used.

Autor: raki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>>
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?
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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.