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 ist 😞

    Hier 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 per malloc 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
    n 😞

    Du musst natürlich die Definition in der Schleife raus nehmen. Mach sie groß genug.


Anmelden zum Antworten