标题中共享c常量

时间:2011-03-31 12:01:54

标签: c header constants string-literals

我想在多个c文件中共享某些C字符串常量。为了便于阅读,常量跨越多行:

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

执行上述操作会为QUERY提供重新定义错误。我不想使用宏,因为每行后都需要退格'\'。我可以在单独的c文件中定义这些并在h文件中对变量进行extern但是我觉得我很懒。

在C中还有其他方法可以实现吗?

4 个答案:

答案 0 :(得分:26)

在某些.c文件中,写下你写的内容。 在相应的.h文件中,写

extern const char* QUERY; //just declaration

将.h文件包含在需要常量

的任何位置

没有其他好方法:) HTH

答案 1 :(得分:9)

您可以使用静态效果,所有意图和目的都可以实现效果。

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

答案 2 :(得分:2)

您可以将#define分开

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

然后将它们加入一个定义

#define QUERY QUERY1 QUERY2

答案 3 :(得分:0)

有几种方法

  • 将您的变量放在一个文件中,在标题中将它们声明为extern并在需要的地方包含该标题
  • 考虑使用一些外部工具在宏定义的末尾追加'\'
  • 克服你的懒惰,并在所有文件中将变量声明为extern