1

私の悪い英語でごめんなさい。

例えば ​​:

//
// File : Main.cpp
// 
#include <stdlib.h>
int main()
{
  printf(TEST_DEFINE);
  return (EXIT_SUCCESS);
}

ヘッダー:

//
// File : test_define.h
//
#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

#define TEST_DEFINE

#endif

コンパイラまたは他のプログラムによって、そのヘッダーを含めたい。このヘッダーをCPPファイルに含めたくありません。

どうすれば処理できますか?私はすべての提案を受け入れます。

この状況は非常に注意が必要ですが、私のPOCプログラムには必要です。

4

2 に答える 2

4

GCCには、プログラムの最初の行にあるかのようにプリプロセッサにヘッダーを含めるオプション-include ファイルがあります。#include "file"

マニュアルを見る

たとえば、メインの固定バージョンが与えられた場合(これは#include <stdio.h>):

#include <stdlib.h>
#include <stdio.h>
int main()
{
  printf(TEST_DEFINE);
  return (EXIT_SUCCESS);
}

とあなたのヘッダー:

//
// File : test_define.h
//
#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

#define TEST_DEFINE "hello\n"

#endif

次に、次のように使用できます。

$ g++ -include test_define.h main.cpp -o main
$ ./main
hello
于 2012-10-19T08:43:10.000 に答える
3

ヘッダーを動的に含めることはできません。C++ は静的言語です。

ヘッダーを静的に含める必要があります#include "test_define.h"

唯一の代替手段は、C++ パーサーを自分で作成する (または既存のパーサーを使用する) こと、ヘッダー ファイルを読み取って解析し、シンボル ツリーから必要なシンボルを抽出することです。しかし、何年にもわたる本格的なプログラミング経験があり、なぜこれを行う必要があるのか​​ を説明できる人でない限り、絶対にやるべきではありません.


さて、私たちは動的なものについて話しているのではなく、#includeいくつかの定義を含む単純な古いヘッダー ファイルについて話しているのです。

欲しいものは次のとおりです。

以下を含むファイルmy_header.h:

#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

enum {foo, bar} my_enum;

#endif

そして、以下を含むファイルmy_program.cc:

#include "my_header.h"

int main(int argc, char** argv) {
  my_enum my_variable = foo;

  return my_variable == foo ? EXIT_SUCCESS : EXIT_FAILURE;
}
于 2012-10-19T07:51:36.220 に答える