Die Mathe-Redaktion - 13.12.2018 10:08 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
ListenpunktSchwätz / Top 15
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 613 Gäste und 16 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » C: Deklaration einer Variable
Druckversion
Druckversion
Antworten
Antworten
Autor
Kein bestimmter Bereich C: Deklaration einer Variable
FriedrichLaher
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 30.10.2001
Mitteilungen: 1907
Aus: Wien,Oesterr., Wohnort Stuttgart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2018-07-21


der folgende code wird ( mit -std=c99 ) klaglos übersetzt
C
  1. #include <stdio.h>
  2. int main(){
  3. char a[10];
  4. #define FORi(lim) for(int i = 0; i < lim; i++)
  5. FORi(10) a[i] = '0'; FORi(10) printf(" %c",a[i]);
  6.  
  7. char dangers, dngrTxt[30]; int pos = -4;
  8.  
  9. #define dngrMac(dng,txt) \
  10. if ((dng)) dangers = 1, sprintf(dngrTxt + (pos += 4),"%4s",txt )
  11.  
  12. dngrMac(1,"ROW");
  13.  
  14. return 0;
  15. }
  16.  
wogegen im hier folgenden die beiden gleichen macros nicht klappend wollen
C
  1. #define _GNU_SOURCE
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <inttypes.h>
  5.  
  6. void modrateBoard(int N, char r4c[]);
  7. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  8. int main(int N, char **args){
  9. sscanf(args[1],"%d",&N);
  10. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  11.  
  12. char c,r,iL,iR, r4c[N],O[N], L[2*N-1],R[2*N-1], dangers,dngrTxt[50];
  13.  
  14. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  15. void iLR(){iL = c-r+N; iR = c+r-1;}
  16. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  17. #define FORi(lim) for(int i = 0; i < lim; i++)
  18. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  19. char
  20. ok(){
  21. iLR(); dangers = 0; char pos = 6-4; FORi(50) dngrTxt[i] = 0 ;
  22.  
  23. // c..r..
  24. sprintf(dngrTxt,"c%2dr%2d",c,r) // 123456
  25. ;
  26. #define dngrMac(dng,txt) \
  27. if ((dng)) dangers = 1, sprintf(dngrTxt + (pos += 4),"%4s",txt )
  28.  
  29. dngrMac(O[r],"ROW"); dngrMac(L[iL],"LFT"); dngrMac(R[iR],"RGT"),pos += 4;
  30.  
  31. if (!dangers) O[r] = R[iR] = L[iL] = 1
  32. , sprintf(dngrTxt+pos,"%s"," is OK");
  33. else sprintf(dngrTxt+pos,"%s","<- these attack")
  34. ; puts(dngrTxt)
  35. ; return !dangers;
  36. } // ok
  37. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  38. void
  39. setup(int N,int pr)
  40. { FORi(N) r4c[i] = O[i] = 0; FORi(2*N-2) L[i] = R[i] = 0;
  41. c = 1; r = pr;
  42. iLR(); r4c[0] = pr; O[pr] = L[iL] = R[iR] = 1;
  43. modrateBoard(N,r4c);
  44. }
  45. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  46. // char
  47. //back()
  48. // {;
  49. // }
  50. /*<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>*/
  51. /*<><><><><><><><><><><>< S T A R T OF m a i n <><><><><><><><><><><><<>*/
  52. setup(N,1);
  53. c = 5; r = 3; ok(); FORi(N) printf(",%d",r4c[i]);
  54. }
  55.  
unter anderem beschwert sich der Compiler, die i in  den "for(int i = ...)" seien undefinied. Wo steckt der Fehler?
die Übersetzng mit gcc -E ... ( Ausschnitt ) läßt mich nichts erkennen .
C
  1. # 5 "queens.c" 2
  2.  
  3. void modrateBoard(int N, char r4c[]);
  4.  
  5. int main(int N, char **args){
  6. sscanf(args[1],"%d",&N);
  7.  
  8.  
  9. char c,r,iL,iR, r4c[N],O[N], L[2*N-1],R[2*N-1], dangers,dngrTxt[50];
  10.  
  11.  
  12. void iLR(){iL = c-r+N; iR = c+r-1;}
  13.  
  14.  
  15.  
  16. char
  17. ok(){
  18. iLR(); dangers = 0; char pos = 6-4; for(int i = 0 ; i < 50 ; i++ ;) dngrTxt[i] = 0 ;
  19.  
  20.  
  21. sprintf(dngrTxt,"c%2dr%2d",c,r)
  22. ;
  23.  
  24.  
  25.  
  26. if (O[r]) dangers = 1, sprintf(dngrTxt+(pos+=4),"%4s","ROW"; if (L[iL]) dangers = 1, sprintf(dngrTxt+(pos+=4),"%4s","LFT"; if (R[iR]) dangers = 1, sprintf(dngrTxt+(pos+=4),"%4s","RGT",pos += 4;
  27.  
  28. if (!dangers) O[r] = R[iR] = L[iL] = 1
  29. , sprintf(dngrTxt+pos,"%s"," is OK");
  30. else sprintf(dngrTxt+pos,"%s","<- these attack")
  31. ; puts(dngrTxt)
  32. ; return !dangers;
  33. }
  34.  
  35. void
  36. setup(int N,int pr)
  37. {
  38. c = 1; r = pr
  39. iLR(); r4c[0] = pr; O[pr] = L[iL] = R[iR] = 1;
  40. modrateBoard(N,r4c);
  41. }
  42.  
  43. char
  44. back()
  45. {
  46. }
  47.  
  48.  
  49. setup(N,1);
  50. c = 5; r = 3; ok();
  51. }
  52.  
  53.  



-----------------
Wenn das Erlernen der Mathematik einigermaßen ihre Erfindung widerspiegeln soll, so muß es einen Platz für Erraten, für plausibles Schließen haben.  [Vorw. Georg Pólyas Buch "Mathem. und Plausibles Schliessen, B.1 Induktion und Analogie in d. Mathem."]



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5423
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2018-07-21


Hallo,

Etwas wie for(int i=0[...] macht klassisch in C keinen Sinn, die Variablendeklaration muss in einem eigenen Statement vor der Schleife erfolgen: smile
C
int i;
for(i=0; [...]

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
FriedrichLaher
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 30.10.2001
Mitteilungen: 1907
Aus: Wien,Oesterr., Wohnort Stuttgart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2018-07-21


danke für Deine Müher, aber das kleine Beispiel, mit gcc -std=c99 ...
übersetzt fdunktioniert ja, sogar lauffähig.
Das darin definierte i ist dann lokal für die Schleife .



  Profil  Quote  Link auf diesen Beitrag Link
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5423
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2018-07-21


Hallo,

Es ist auch seit C99 im Standard, ohne die Verwendung diesen beschwert sich daher der Compiler smile

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
FriedrichLaher hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2018 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]