関数宣言と#ifdef (UNIXからWindowsへの移植)

[戻る]
みんと 2002/03/22(金) 20:22:02
みんとと言います。

UNIX上 c++ で作られ、期待どおりに動作しているプログラムを Windows上
VC++ に移植しようとしています。

そのソースに以下のような記述があり、ここでコンパイルエラーが出ます。
関数宣言の {} の前に return a; とかあるので、エラーになって当然の
ような気がするのですが、それが何故 UNIX上 c++ ではエラーにならない
のか分かりません。

私の理解が足りないのだと思うのですが、これは一体どういうことなので
しょうか。

Complex Complex::operator+( Complex &other )
#ifdef AAA
return a;
#endif
{
//ちょっとした処理があって
return b;
};

以上です。

YuO [E-Mail] 2002/03/22(金) 22:31:23
コンパイラの独自拡張じゃないですかね……。

ISO/IEC C++によると,
function-definition:
    decl-specifier-seq(opt) declarator ctor-initializer(opt) function-body
    decl-specifier-seq(opt) declarator function-try-block

function-body:
    compound-statement
compound-statement:
    { statement-seq(opt) }
となっていますから,{と}で囲む必要があります。


ところで,Complexってことは複素数型ですよね。
標準C++ライブラリにcomplexっていうものがあります。
これを使うことを考えてみても良いでしょう。

みんと 2002/03/25(月) 11:09:36
[[解決]]
YuO さんありがとうございました。

>>コンパイラの独自拡張じゃないですかね……。

そうでした。
元にしていたソースは GNU C++ で、その拡張として以下があるという
ことが分かりました。

GNU C++ extends the function-definition syntax, 
which allows you to specify a name for the result
of a function outside the body of the definition,
in C++ programs. 

type 
functionname (args) return resultname; 
{ 
   ... 
   body 
   ... 
}

どうもありがとうございました。

古いスレッドには追加発言できません。