0

(IDEに頼りすぎたケース)

単体テストの目的で C++ としてコンパイルするレガシー C コードがいくつかあります。C ソースは、環境に基づいて条件付きで定義するという点で C++ に対応しています。

例 (PRIVATEは に解決されstaticます):

#if!defined __cplusplus
#define PRIVATE1 PRIVATE
#endif

...

PRIVATE1 const int some_var;

PRIVATE1問題は、何が C++ に解決されるのか、または C++ にあるのかを見つけることができないように見えることです。

MinGW/gcc インクルード パス、C++ ISO 仕様、入手可能な C++ 書籍を検索しましたが、役に立ちませんでした。

編集:

確かに、投稿する前にコマンドラインとメイクファイルをチェックしました。

4

7 に答える 7

5

ISO C++仕様にはこのようなものはありません。ほとんどの場合、PRIVATE1(およびPRIVATE) はプロジェクトの別の場所で定義されています。これは .h ファイルである必要はないことに注意してください#define。makefile でコンパイラ スイッチを介して定義することもできます。プロジェクト ディレクトリで完全な grep を実行することをお勧めします。

于 2009-07-27T19:42:15.127 に答える
4

PRIVATE1が に解決されPRIVATE、 にPRIVATE解決された場合static、 にPRIVATE1解決されstaticます。

于 2009-07-27T19:41:40.320 に答える
2

Eclipse C++ マネージ プロジェクトは、ちょっとばかげています。

プロジェクトが C++ と宣言されている場合でも、そのビルドはファイル拡張子に基づいているため、.h ファイルは C として前処理され、別のヘッダー ファイルから #define PRIVATE1 を取得する C++ ヘッダーではなく、同様にラップされます。

#ifdef __cpluplus.

その後、プロジェクトは g++ によってリンクされます。

于 2009-07-29T21:43:56.963 に答える
2

これらが MinGW 自体によって定義されている可能性は低いです (不可能ではありません)。C++ または C 実装によって定義されたマクロは、アンダースコアで開始する必要があります。

于 2009-07-27T19:44:20.143 に答える
0

PRIVATE1 で関数を宣言できますか? その場合は、次のように関数を記述します。

PRIVATE1 void Foo() {
    // __FUNCSIG__ in Visual Studio, not sure about GCC
    std::cout << __FUNCSIG__ << std::endl;
}
于 2009-07-27T20:32:30.297 に答える
0

ほとんどの場合、C++ では "private:" に定義されています。

于 2009-07-27T19:44:37.930 に答える