Reputation: 2105
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
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
Reputation: 2235
There are several ways
Upvotes: 0
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
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