Общие константы c в заголовке

Я хочу поделиться некоторыми строковыми константами C в нескольких файлах c. Константы охватывают несколько строк для удобочитаемости:

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

Выполнение выше дает ошибку переопределения для QUERY. Я не хочу использовать макрос, поскольку backspace '\' потребуется после каждой строки. Я мог бы определить их в отдельном файле c и extern переменные в файле h, но я чувствую себя ленивым.

Есть ли другой способ достичь этого в C?

Ответы

Ответ 1

В некотором .c файле напишите, что вы написали. В соответствующем файле .h напишите

extern const char* QUERY; //just declaration

Включите файл .h, где вам нужна константа

Никакой другой хороший способ:) НТН

Ответ 2

Вы можете использовать static 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

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

Ответ 3

Вы можете просто #define выделить их

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

а затем присоединить их к одному определению

#define QUERY QUERY1 QUERY2

Ответ 4

Существует несколько способов

  • поместите переменные в один файл, объявите их extern в заголовке и включите этот заголовок там, где это необходимо.
  • рассмотрим возможность использования некоторого внешнего инструмента для добавления "\" в конце определения макроса
  • преодолеть свою лень и объявить переменные как внешние во всех ваших файлах.