标题中共享c常量

Man*_*ish 26 c header constants string-literals

我想跨多个c文件共享某些C字符串常量.常量跨越多行以便于阅读:

const char *QUERY = "SELECT a,b,c "
                    "FROM table...";
Run Code Online (Sandbox Code Playgroud)

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

有没有其他方法可以在C中实现这一目标?

Arm*_*yan 30

在某些.c文件中,写下你写的内容.在适当的.h文件中,写

extern const char* QUERY; //just declaration
Run Code Online (Sandbox Code Playgroud)

在需要常量的地方包含.h文件

没有其他好方法:) HTH

  • @Acme:Ctrl+C——Ctrl+V 正是我想要避免的。我知道如果我在一个 c 文件中更改它,我会忘记在另一个文件中更改它,这将导致调试噩梦。 (2认同)

小智 11

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

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
Run Code Online (Sandbox Code Playgroud)

myfunc.h:

#ifndef MYFUNC_H
#define MYFUNC_H
void myfunc(void);
#endif
Run Code Online (Sandbox Code Playgroud)

myfunc.c:

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)