web-dev-qa-db-ja.com

ヘッダーの共有C定数

複数のcファイル間で特定のC文字列定数を共有したい。読みやすくするために、定数は複数行にまたがっています。

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

上記を実行すると、QUERYの再定義エラーが発生します。すべての行の後にバックスペース「\」が必要になるため、マクロを使用したくありません。これらを別のcファイルで定義し、hファイルで変数をexternすることもできますが、それを行うのは面倒です。

Cでこれを達成する他の方法はありますか?

27
Manish

一部の.cファイルに、記述した内容を記述します。適切な.hファイルに、

extern const char* QUERY; //just declaration

定数が必要な場所に.hファイルを含めます

他に良い方法はありません:) HTH

28
Armen Tsirunyan

静的定数を使用して、すべての意図と目的に合わせて効果を達成できます。

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

単に#defineそれらは別々です

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

そして、それらを1つの定義に結合します

#define QUERY QUERY1 QUERY2
2
pmg

いくつかの方法があります

  • 変数を1つのファイルに配置し、ヘッダーでexternと宣言し、必要に応じてそのヘッダーを含めます
  • マクロ定義の最後に「\」を追加するための外部ツールの使用を検討してください
  • 怠惰を克服し、すべてのファイルで変数をexternとして宣言する
0
Nekuromento