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?
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
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;
}
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
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
来源:https://stackoverflow.com/questions/5499504/shared-c-constants-in-a-header