Manish
Manish

Reputation: 2105

shared c constants in a header

I want to share certain C string constants across multiple c files. The constants span multiple lines for readability:

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

Doing above gives redefinition error for QUERY. I don't want to use macro as backspace '\' will be required after every line. I could define these in separate c file and extern the variables in h file but I feel lazy to do that.

Is there any other way to achieve this in C?

Upvotes: 45

Views: 56215

Answers (4)

tipaye
tipaye

Reputation: 474

You could use static consts, to all intents and purposes your effect will be achieved.

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;
}

Upvotes: 19

Nekuromento
Nekuromento

Reputation: 2235

There are several ways

  • place your variables in one file, declare them extern in the header and include that header where needed
  • consider using some external tool to append '\' at the end of your macro definition
  • overcome your laziness and declare your variables as extern in all your files

Upvotes: 0

pmg
pmg

Reputation: 108988

You can simply #define them separate

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

and then join them in one definition

#define QUERY QUERY1 QUERY2

Upvotes: 3

Armen Tsirunyan
Armen Tsirunyan

Reputation: 133092

In some .c file, write what you've written. In the appropriate .h file, write

extern const char* QUERY; //just declaration

Include the .h file wherever you need the constant

No other good way :) HTH

Upvotes: 50

Related Questions