Több helyen érvényes const hogyan?

Kezdőlap Fórumok Programozás Több helyen érvényes const hogyan?

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • #1977255
    gabaman
    Felhasználó

      Vagy használj makrót, vagy az extern kulcsszót:

      const.h:

      Code:
      #define MINDENHOVA_KELL_1      1
      #define MINDENHOVA_KELL_2      2
      #define MINDENHOVA_KELL_3      3

      vagy

      main.c:

      Code:
      #include „const.h”
      #include „ideis.h”

      const int mindenhova_kell[3] = {1, 2, 3};

      int main( int argc, char* argv[] ) {
      int valami = mindenhova_kell[0];
      // ….
      }

      const.h:

      Code:
      extern const int mindenhova_kell[3];
      #1977256
      NAttila
      Felhasználó

        Vagy használj makrót, vagy az extern kulcsszót:

        Köszi a tippeket, este kipróbálom! Tegnap kísérletezve egy érdekes dolgot találtam, a hiba ennyitõl is elmúlik:

        Code:
        mv *.c *.cpp

        Bár a generált kód majdnem kétszer olyan hosszú… :unsure:

        #1977257
        gabaman
        Felhasználó

          Köszi a tippeket, este kipróbálom! Tegnap kísérletezve egy érdekes dolgot találtam, a hiba ennyitõl is elmúlik:

          Code:
          mv *.c *.cpp

          Bár a generált kód majdnem kétszer olyan hosszú… :unsure:
          [align=right][snapback]89303[/snapback][/align]

          #1977258
          tovis
          Felhasználó

            const int mindenhova_kell[3] = {1, 2, 3};
            Most akkor konstans vagy egy közös „viszonylag” változatlan változó?

            A konstans az inkább ez:
            #define MINDENHOVA_KELL „x1x2x3”

            Az elõbbi is mûködik, de én akkor már valahol, mondjuk a main-ban deklarálnám és mindenütt csak externként hivatkoznék rá, pl.:

            extern int *mindenhova_kell;

            kivéve persze a main-t, valahogy így

            #ifndef _MAIN_MODULE_ /*ezt a main eljén, az include-ok elõtt deklarálnám */
            extern int *mindenhova_kell;
            #endif

            #1876412
            csaba
            Felhasználó

              Egy programozási gondban kérnék segítséget!
              Adva van a következõ mintaprogram:

              main.c

              #include „const.h”
              #include „ideis.h”

              int main( int argc, char* argv[] ) {
              int valami = mindenhova_kell[0];
              // ….
              }

              const.h

              const int mindenhova_kell[3] = {1, 2, 3};

              ideis.h

              int minta( int akarmi );

              ideis.c

              #include „ideis.h”
              #include „const.h”

              int minta( int akarmi ) {
              int valami = mindenhova_kell[0];
              // ….
              }

              Ez csak egy általam lecsonkolt mintakód (az eredeti hosszú lenne) a problémám viszont jól fedi. A const.h-ban van egy konstans, amit a programom több moduljában is el szeretnék érni (itt csak egy plusz modul van (ideis.c), valójában több helyen is kellene). Ha ezt a programot megpróbálom lefordítani, mondjuk így:

              gcc -std=c99 -c *.c && gcc *.o

              abból a következõ hibaüzenet születik:

              main.o(.rodata+0x0): multiple definition of `mindenhova_kell’
              ideis.o(.rodata+0x0): first defined here
              collect2: ld returned 1 exit status

              Vagyis a fordítás sikerül, de a linker elakad azon, hogy ez a konstans szerinte kétszer van deklarálva.
              Ha megpróbálom az ideis.c-bõl a const.h-ra való hivatkozást kiszedni, akkor a fordításig sem jutok el, mert akkor (jogosan) a mindenhova_kell-rõl nem tudja, micsoda. Ha lokális változóként, mindkét függvényben létrehozom ezt a konstanst, akkor mûködik, de… egyrészt minek foglaljam a memóriát kétszer ugyanazzal, másrészt meg nem túl szép… 🙂
              Tud valaki megoldást erre?

            5 bejegyzés megtekintése - 1-5 / 5
            • Be kell jelentkezni a hozzászóláshoz.