Array mit Ansi-C deklarieren
-
Hallo,
ich schreibe in C code um daraus eine mexw32 für Matlab zu kompilieren. Dabei wollte ich ein Array anlegen z.B. so:
double array[3] = {2 ,23, 34};
Der Standard Lcc compiler von Matlab sag mir aber dann:
Error nmj_make_Abc_matrices_file.c: 25 illegal statement termination
Error nmj_make_Abc_matrices_file.c: 25 skipping `static' `double'
Error nmj_make_Abc_matrices_file.c: 25 undeclared identifier `array'
Error nmj_make_Abc_matrices_file.c: 25 type error: pointer expected
Error nmj_make_Abc_matrices_file.c: 25 type error: pointer expected
Error nmj_make_Abc_matrices_file.c: 25 type error: pointer expected
Error nmj_make_Abc_matrices_file.c: 25 illegal expressionWenn ich statt dessen:
dobule array[3]; array[0] = 2; ... array[2] = 34;
funktioniert alles. Soll ich daraus schließen, dass man die direkte Initialisierung mit mehreren Elementen in Ansi-C nicht möglich ist, oder mach ich einen andere Fehler?
Gruss
Pierre
-
^^der compiler ist buggy.
double array[3] = {2 ,23, 34};
müsste eigentlich gehen. versuch mal:double array[3] = {2.0, 23.0, 34.0};
, vielleicht hilfts.
-
Hi,
das mit 2.3 statt 2 ist nicht der Fehler. Ich die Werte auch schon entsprechende gecastet.
Dass der Compiler buggy ist würde mich wundern. Es ist der normale Matlab C Compiler....
-
Vielleicht liegt der Fehler ja auch irgendwo anders. Poste doch mal ein vollständiges Programm.
-
Hallo,
das ganze Programm ist ziemlich lang. Der Fehler entsteht aber gleich zu Begin einer void funktion:void field_mat(double filament[filvec_s],double coils[coilsvec_s][2],double coord_or_currents[codin_s], double param_vec[codin_s], double phitheta[phitheat_s], double pre_current[coilsvec_s]) { double B_desired[3] = {param_vec[0]*(cos(phitheta[0])*cos(phitheta[1])),param_vec[0]*(sin(phitheta[0])),param_vec[0]*(cos(phitheta[0])*sin(phitheta[1]))}; double m[3]={(cos(phitheta[0])*cos(phitheta[1]))*param_vec[1],(sin(phitheta[0]))*param_vec[1],param_vec[1]*(cos(phitheta[0])*sin(phitheta[1]))}; double U[6][8]= { {1,0,0,0,0,0,0,0}, {0,1,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0}, {0,0,0,m[0],m[1],m[2],0,0}, {0,0,0,0,m[0],m[2],m[1],0}, {0,0,0,-m[2],0,m[0],m[1],-m[2]} }; double Rz[3][3]={ {cos(-phitheta[0]), -sin(-phitheta[0]), 0}, {sin(-phitheta[0]), cos(-phitheta[0]), 0}, {0, 0, 1} }; double Ry[3][3]={ {cos(phitheta[1]),0,sin(phitheta[1])}, {0,1,0}, {-sin(phitheta[1]),0,cos(phitheta[1])} }; double Rzy[3][3]; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { Rzy[i][j] = (Rz[i][0]*Ry[0][j])+(Rz[i][1]*Ry[1][j])+(Rz[i][2]*Ry[2][j]); } }
-
Hallo,
ich hab zwar noch nicht die Lösung des Problems, bin aber einen Schritt weiter:
Anscheid hat es etwas damit zu tun, dass die Elemente, die ich in das array tranferieren will Argumente der void-function sind. Wenn ich einfach neue Werte einsetzte gibt es dein Fehler nicht.
Irgendjemand einen Gedanken dazu?
-
pierremassello schrieb:
Anscheid hat es etwas damit zu tun, dass die Elemente, die ich in das array tranferieren will Argumente der void-function sind. Wenn ich einfach neue Werte einsetzte gibt es dein Fehler nicht.
Irgendjemand einen Gedanken dazu?Ohne das jetzt nachgelesen zu haben, behaupte ich:
Eine Initialisierung eines Arrays auf diese Weise funktioniert nur mit Werten, die zur Compilezeit bekannt sind.
-
Das scheint der Grund zu sein. Womöglich bleibt mir nichts anderes übrig als alle Variablen die nicht fest stehen über den normalen Indexoperator [] in das Array einzufügen. Die Einzufügenden Werte sind leider sehr verschieden, was ein Befüllen des Arrays über eine schleife aussschließt. Sieht für mich nach einer Fleißarbeit aus oder kennt jemand eine andere Möglichkeit mehrere Wert gleichzeitig in einem Array zu verändern?
-
Belli schrieb:
Eine Initialisierung eines Arrays auf diese Weise funktioniert nur mit Werten, die zur Compilezeit bekannt sind.
Nein, das ist nur der Fall, wenn das Array static storage duration hat, also außerhalb einer Funktion oder mit "static" deklariert wird.
-
Stimmt ... hab's gerade mit einem einfachen Beispiel ausprobiert, geht ohne Probleme.
Also muß TE's Problem ein anderes sein?!