SUBSYSTEM



  • Hallo auch,
    ich möchte ein Programm schreiben, dass in verschiedenen Subsystemen dementsprechende Variablen in eine Struktur einbindet bzw. dieser weglässt.
    Im Klartext: Wenn ich ein Programm als \SUBSYSTEM:CONSOLE kompiliere, soll es Strukturen anders anlegen als wenn ich es mit \SUBSYSTEM:WINDOWS kompiliere. Bei mir sieht das bis jetzt so aus:

    `struct strTest {

    int var1 ;

    char var2 ;

    #ifdef \SUBSYSTEM:WINDOWS

    int var3 ;

    #endif

    } ;`

    Hoffe, mir kann geholfen werden 🙂



  • und was genau ist deine Frage?



  • na wie ich es hinbekomm, dass eine Struktur verschiedene Felder hat, jenachdem mit welchem subsystem der code kompiliert wird



  • Offensichtlich benutzt du den Compiler von Microsoft, wirf doch mal einen Blick in die Doku oder deine Projekteinstellungen und schau dir an welche projekt-spezifischen #defines hierfür vorgesehen sind.
    Es gibt einmal _WIN32 afaik und _CONSOLE (glaub ich), aber ich hab diesen gerade nicht zur Hand.



  • daersc schrieb:

    na wie ich es hinbekomm, dass eine Struktur verschiedene Felder hat, jenachdem mit welchem subsystem der code kompiliert wird

    das hast du aber dir selber beantwortet, mit dem #ifdef. Und beim Compilieren die entsprechende Makros (er)stellen.



  • also funktioniert das tatsächlich so?
    is ja klasse 🙂 ich hielt das nur für nen groben entwurf...



  • du musst aber natürlich immer aufpassen, dass du die #ideef immer überall hast, wo es auf diese Member zugegriffen wird.

    void bar(struct strTest *t)
    {
        printf("var1 = %d\nvar2 = %d\n",
            t->var1, t->var2);
    
    #ifdef \SUBSYSTEM:WINDOWS
        printf("Nur unter Subsystem Windows: var3 = %d\n", t->var3);
    #endif
    }
    
    void foo()
    {
      struct strTest test;
      test.var1 = 7;
      test.var2 = 8;
      ...
    #ifdef \SUBSYSTEM:WINDOWS
       test.var3 = test.var1 + test.var2;
    #endif
    
      bar(&test);
    }
    

Anmelden zum Antworten