gemeinsam genutzte c-Konstanten in einem Header

Lesezeit: 3 Minuten

Manishs Benutzeravatar
Manisch

Ich möchte bestimmte C-String-Konstanten für mehrere C-Dateien freigeben. Die Konstanten erstrecken sich zur besseren Lesbarkeit über mehrere Zeilen:

const char *QUERY = "SELECT a,b,c "
                    "FROM table...";

Die obige Vorgehensweise führt zu einem Neudefinitionsfehler für QUERY. Ich möchte kein Makro verwenden, da nach jeder Zeile die Rücktaste ‘\’ erforderlich ist. Ich könnte diese in einer separaten c-Datei definieren und die Variablen in der h-Datei extern, aber ich fühle mich faul, das zu tun.

Gibt es eine andere Möglichkeit, dies in C zu erreichen?

  • Header-Dateien, wie Armen sagt – überprüfen Sie seine Antwort.

    – Sadik

    31. März 2011 um 12:05 Uhr

  • Beachten Sie, dass in C++ global const impliziert static implizit: stackoverflow.com/questions/12042549/…

    – Ciro Santilli OurBigBook.com

    29. November 2018 um 14:22 Uhr

Schreiben Sie in eine .c-Datei, was Sie geschrieben haben. Schreiben Sie in die entsprechende .h-Datei

extern const char* QUERY; //just declaration

Fügen Sie die .h-Datei überall dort ein, wo Sie die Konstante benötigen

Kein anderer guter Weg 🙂 HTH

  • 🙁 Dachte ich mir. Schätze, ich muss aufhören, so faul zu sein!

    – Manisch

    31. März 2011 um 12:08 Uhr

  • @Manish:: Es ist besser, als die Erklärung in jedem zu schreiben .c Dateien. Und du weißt Ctrl+CCtrl+V funktioniert auch.

    – Sadik

    31. März 2011 um 12:14 Uhr

  • +1 Sie können jede gewünschte Farbe haben, solange es schwarz ist LOL

    – pmg

    31. März 2011 um 12:16 Uhr

  • @Acme: Strg + C – Strg + V ist genau das, was ich vermeiden möchte. Ich weiß, dass ich, wenn ich es in einer c-Datei ändere, vergesse, es in einer anderen zu ändern, was zu einem Debugging-Albtraum führen wird.

    – Manisch

    31. März 2011 um 12:22 Uhr

  • Weiß jemand, ob es ein Tool gibt, um die Header-Dateien zu generieren?

    – Deich

    1. April 2020 um 15:04 Uhr

Benutzeravatar von tipaye
tipaye

Sie könnten statische Konstanten verwenden, in jeder Hinsicht wird Ihr Effekt erreicht.

myext.h:

#ifndef _MYEXT_H
#define _MYEXT_H
static const int myx = 245;
static const unsigned long int myy = 45678;
static const double myz = 3.14;
#endif

myfunc.h:

#ifndef MYFUNC_H
#define MYFUNC_H
void myfunc(void);
#endif

myfunc.c:

#include "myext.h"
#include "myfunc.h"
#include <stdio.h>

void myfunc(void)
{
    printf("%d\t%lu\t%f\n", myx, myy, myz);
}

myext.c:

#include "myext.h"
#include "myfunc.h"
#include <stdio.h>

int main()
{
    printf("%d\t%lu\t%f\n", myx, myy, myz);
    myfunc();
    return 0;
}

  • Dieser Ansatz hat einen Nachteil. Wenn die Konstante nicht in einer Kompilierungseinheit verwendet wird, geben einige Compiler eine Warnung aus, die nicht stummgeschaltet werden kann, ohne auf Compiler-Besonderheiten zurückzugreifen.

    – Sander Mertens

    19. Oktober 2021 um 11:49 Uhr

Sie können einfach #define sie trennen

#define QUERY1 "SELECT a,b,c "
#define QUERY2 "FROM table..."

und verbinden Sie sie dann in einer Definition

#define QUERY QUERY1 QUERY2

  • Das ist ziemlich kreativ 🙂 aber es sieht hässlich aus.

    – Manisch

    31. März 2011 um 12:07 Uhr

  • Hässlich und “Backspace ‘\'” gehen Hand in Hand 🙂

    – pmg

    31. März 2011 um 12:11 Uhr

Es gibt mehrere Möglichkeiten

  • Platzieren Sie Ihre Variablen in einer Datei, deklarieren Sie sie im Header als extern und fügen Sie diesen Header bei Bedarf ein
  • Erwägen Sie die Verwendung eines externen Tools, um ‘\’ am Ende Ihrer Makrodefinition anzuhängen
  • überwinden Sie Ihre Faulheit und deklarieren Sie Ihre Variablen in allen Ihren Dateien als extern
1389400cookie-checkgemeinsam genutzte c-Konstanten in einem Header

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy