33

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

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

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

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

4

4 に答える 4

37

いくつかの .c ファイルに、あなたが書いたものを書きます。適切な .h ファイルに次のように記述します。

extern const char* QUERY; //just declaration

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

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

于 2011-03-31T12:04:06.360 に答える
14

効果が達成されるすべての意図と目的に対して、静的な定数を使用できます。

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;
}
于 2015-02-17T17:21:22.620 に答える
3

あなたは単に#defineそれらを分離することができます

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

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

#define QUERY QUERY1 QUERY2
于 2011-03-31T12:05:56.307 に答える
0

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

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