Variable ohne Delcaration nach Loop
-
Hallo zusammen,
Ich habe folgendes Probelm.
Ich befülle innerhalt eines Loop eine Variable und muß die nach dem Loop ausgeben.
Allerdings meldet mir VS beim Compiling das die Variable aussßerhalb des Loop nicht declarioert istHier der Loop:
const float threads_factor[] = { 0.5, 0.7, 0.8 }; PGM_P tram1 = GET_TEXT(MSG_TRAMMING_FB1); PGM_P tram2 = GET_TEXT(MSG_TRAMMING_FB2); char msg1[strlen_P(tram1)+1]; char msg2[strlen_P(tram2)+1]; LOOP_S_L_N(i, 1, G35_PROBE_COUNT) { const float diff = z_measured[0] - z_measured[i], adjust = ABS(diff) < 0.001f ? 0 : diff / threads_factor[(screw_thread - 30) / 10]; const float full_turns = trunc(adjust); const float decimal_part = adjust - float(full_turns); const int minutes = trunc(decimal_part * 60.0f); SERIAL_ECHOPGM("Turn "); SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i])); SERIAL_ECHOPGM(" ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW", " by ", ABS(full_turns), " turns"); SERIAL_ECHOPGM(" and ", ABS(minutes), " minutes"); if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPGM(" (", -diff, "mm)"); SERIAL_EOL(); sprintf_P(msg1, tram1, "FR", "CCW", "1"); sprintf_P(msg2, tram2, "15", "0.06",""); char msg[strlen_P(msg1)+strlen_P(msg2)+1]; if(i == 1) {strcpy(msg, msg1);} else {strcat(msg, msg1);} strcat(msg, msg2); } SERIAL_ECHO_START(); SERIAL_ECHOLN(msg);
-
@G-Steininger Dann definiere sie vor der Loop.
-
Hab ich versucht, aber dann wird sie nicht mit den Werten befüllt die in der Loop an die Varaiable übergeben werde
n
-
Nach C++/CLI sieht der Code aber nicht aus.
Und dann noch
char msg[strlen_P(msg1)+strlen_P(msg2)+1];
also VLA, welche aber nur noch optional im neuesten C-Standard (C++11) sind (und in C++ gar nicht existieren)...
Und das wird auch der Grund sein, warum
msg
nach der Loop nicht korrekt ist (denn vor der Loop kennst du ja die Größe noch nicht).
Benutze also (für C) entweder ein fixes Array oder aber permalloc
ein dynamisches Array.
-
@G-Steininger sagte in Variable ohne Delcaration nach Loop:
Hab ich versucht, aber dann wird sie nicht mit den Werten befüllt die in der Loop an die Varaiable übergeben werde
nDu musst natürlich die Definition in der Schleife raus nehmen. Mach sie groß genug.