общие константы c в заголовке - PullRequest
22 голосов
/ 31 марта 2011

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

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

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

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

Ответы [ 4 ]

26 голосов
/ 31 марта 2011

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

extern const char* QUERY; //just declaration

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

Другого хорошего способа нет :) HTH

9 голосов
/ 17 февраля 2015

Вы можете использовать статические константы, чтобы достичь всех ваших целей.

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 голосов
/ 31 марта 2011

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

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

, а затем объединить их в одном определении

#define QUERY QUERY1 QUERY2
0 голосов
/ 31 марта 2011

Есть несколько способов

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