>Um welche Sprache handelt es sich?
Das war die ernstgemeinte Frage nach der Programmiersprache.
"volatile" deutet auf C hin, aber die Initialisierung passt nicht.
Deswegen die Nachfrage.
ist eigentlich schon fast genau das, was Du nicht tun willst.
Ist ein wenig verwirrend. Warum machst Du es denn nicht so, wenn Du es
dann doch so machst und sei es auch nur um zu zeigen was Du nicht
machen willst.
Das ist ganz einfach warum ich das machen will: es sind die initialwerte
die alle 100 schritte in den zweidimensionalen array geladen werden
sollen. und ich hab keine lust jedes feld einzeln per field[0][0] =
true; anzusprechen.
Oder noch anders:
Wenn Du die runden Klammern in dem obigen Fragment durch geschweifte
Klammern ersetzt, dann hast Du genau eine Zuweisung an jedes einzelne
Element. Das muss man so nicht machen, aber was stört daran wenn Du es
doch schon fast fertig hast?
>ich hab keine lust jedes feld einzeln per field[0][0] = true; anzusprechen.
Das ist sicherlich ein Missverständnis.
Du brauchst das ja nicht so zu machen. Mach es doch einfach so wie in
Deinem ersten Posting geschrieben.
Ach, Mensch. Du meinst wahrscheinlich folgendes.
Das:
1
a[0][0]=77;
ist eine einzelne Zuweisung.
Das aber:
1
a[10][10]={0,1,2,<...>99};
ist durchaus auch eine Reihe von einzelnen Zuweisungen an jedes einzelne
Element.
Eine generische Zuweisung an mehrere Elemente gleichzeitg gibt es in C
nicht. (Und ist mir sonst auch nicht untergekommen).
andere frage: gibt es eien funktion um einen array in einen anderen
array (mit gleichen bounds) direkt zu kopieren, ohne eine schleife? also
ne funktion oder prozedur.
Die Fehlermeldungen
>main.c:46: Warnung: Eingebaute Funktion »y1« als Nicht-Funktion deklariert>main.c: In Funktion »main«:>main.c:203: Fehler: expected expression before »{« token>make: *** [main.o] Fehler 1
haben primär nichts mit Deiner Zuweisung zu tun. Im übrigen geht das,
wie oben von Dir beschrieben nur als Initialisierung. Dann fehlt aber
der Typ.
Wenn Du das mittendrin mehrfach brauchst nimm eine Schleife oder ein
konstantes Array das Du dann umkopierst.
>okay danke! damit ist meine frage geklärt, werd ich das wohl mit viel>schreibarbeit machen müssen ^^
Kaum:
1
for(i=0;i<10;i++)
2
for(k=0;k<10;k++)
3
a[i][k]=TRUE;
>gibt es eien funktion um einen array in einen anderen>array (mit gleichen bounds) direkt zu kopieren, ohne eine schleife? also>ne funktion oder prozedur.
Ja, memcpy.
warum kompliziert, wenns auch einfach ginge, in dem fall geht es eben
nicht und ich muss auf schleifen zurückgreifen ;)
und die der fehler hat was mit der zuweisung zu tun, weil er sich genau
darauf bezieht ;)
entschuldigung aber wenn der fehler genau die zeile ankreidelt, in der
die zuweisung ist (main.c:203: Fehler: expected expression before »{«
token) dann hat das wohl sehr wohl damit was zu tun, und zwar das er die
{} hinter dem = nicht mag.
Wahrscheinlich redet der Compiler nur von "y1" weil er auch mal was
unsinniges sagen möchte...
Mannoman, keine Ahnung, aber noch die Antwortenden korrigieren...
1. das mit y1 ist nur eine WARNUNG
2. Ist das y1 eine ganze weile weiter oben
3. Hat y1 absolut NICHTS mit der zuweisung zu tun. Der code funktioniert
trotz der warnung einwandfrei
Wenn du meinst das du der einzige hier bist mit ein wenig ahnung vom
programmieren dann viel spaß mit der einstellung. Du bist nicht der
einzige mit programmiererfahrung, nur weil grade erst mit C anfange ist
das kein grund so einen ton anzuschlagen. Ich finds einfach nur (sorry)
assozial sätze wie "Mannoman, keine Ahnung, aber noch die Antwortenden
korrigieren..." rauszuhauen, das kann man auch anders formulieren oder
sich ganz einfach sparen (schweigen ist gold). Fang du erstmal an
fragestellungen richtig zu lesen und zu verstehen bevor du andere
runtermachst weil sie nicht so ein semi-genie sind wie du.
Sorry, wegen meines Tones.
Aber dann poste halt Code ohne Warnings.
Das Problem ist oft, das die Fehler nach dem ersten (auch wenn es
Warnings sind) Folgefehler sind, die nur daraus folgen, das der Compiler
aus dem was er danach liest noch was zu machen versucht.
Das schien mir in diesem Fall, zu dem Fehlerbild zu passen, wenn y1 als
Funktion ausgefasst wurde, aber bei der Initialisierung ein Typ fehlt.
Bei so einer simplen Frage, bin ich davon ausgegangen, das Du keinerlei
Ahnung von C hast. Daher war das noch wahrscheinlicher und Deine
"Besserwisserei" schien mir unabgebracht.
Also einfach kompilierbaren Code posten. Und Warnings werden nicht
einfach ignoriert.
Mir ist sehr wohl bewusst, dass warnings nicht ignoriert werden sollten
(auch wenn man es kann wenn der code stattdessen funktioniert).
Nur ist y1 einfach ein short, der auch nur in if's und zuweisungen
verwendet wird und ich keine ahnung habe woher die warning kommt, und
mir die warning auch nur unter linux angezeigt wird (windows zeigt sie
nicht an). wüsste ich woher die warning kommt würde ich sie nicht
ignorieren, ich bin mit meinem code oft sehr penibel was warnings angeht
(in allen sprachen in denen ich schreibe)
Hier der kompilierbare code (auch wenn das für meine frage ohne belang
ist...):
der gcc-Compiler kennt y1 als builtin function (Bessel-Funktion),
deshalb warnt er hier, dass y1 umdefiniert wird als short. Die
Umdefinition wird aber akzeptiert und deswegen funktioniert der Code.
s. http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Microsoft Compiler kennen die Bessel-Funktion vermutlich nicht als
builtin function, deswegen geht's dort ohne Warning.
HP
Markus Foitschik schrieb:> field = (true,false,false,false,false,false,false,false,false,> false,false,false,true,false,false,false,false,false,false,false,> (etc.)> false,false,false,false,false,false,false,false,false,false,false,> false,false,true);>> es handelt sich um diesen typ:> volatile bool field[10][10];
Es gibt zwei Möglichkeiten:
Bei der Definition der Variablen 'field' kann diese initialisisert
werden:
Es handelt sich hier um ein zweidimensionales Array, deswegen muss jede
Zeile einzeln initialisiert werden.
Auf dem Wege der nachträglichen Zuweisung (mit weichem 's', daher
nie mit 'ß' zu schreiben) geht das so aber nicht. In C können Arrays
nicht zugewiesen werden.
Macht hier aber nichts, da praktisch alle Elemente des Arrays identisch
(nämlich mit false) besetzt werden sollen, und nur zwei davon
abweichen, ist folgende Vorgehensweise möglich:
1
volatileboolfield[10][10];
2
3
memset(field,false,sizeof(field));
4
5
field[0][0]=true;
6
field[9][9]=true;
Ansonsten gilt der übliche Literaturhinweis:
Brian Kernighan & Dennis Ritchie, "Programmieren in C", zweite Auflage,
Hanser-Verlag.
> Ansonsten gilt der übliche Literaturhinweis:>> Brian Kernighan & Dennis Ritchie, "Programmieren in C", zweite Auflage,> Hanser-Verlag.
Allein das hier würde 90% der Standardfragen beantworten:
www.gnu.org/s/gnu-c-manual/gnu-c-manual.pdf
Klaus Wachtler schrieb:> MWS schrieb:>> Nicht ganz, schau' genauer hin...>> Ist zwar Standard (C99), aber geht meines Wissens nicht bei VC++.
Da wir uns gerade im GCC Forumsbereich aufhalten, ist es u.U. möglich,
daß der TS seine Anfrage nicht aus Versehen hier reingeschrieben hat. :D
Mein Hinweis bezog sich aber darauf, daß nicht nur das erste und letzte
Element, sondern auch das 13te (siehe oben) "true" zu sein hat.
Jörg Wunsch schrieb:> Dann geht's so:
...
Ja, so auch, wobei ich meine Version ein klein wenig übersichtlicher
finde. Wenn's ein bisserl kryptischer sein darf, dann ginge das als
Abwandlung ja auch noch :D