Renesas Synergy™

FAQ 103985 : [High-performance Embedded Workshop V.3] High-performance Embedded Workshopで自動生成されたメイン関数の意味がわかりません。

回答

<ソースプログラム>

#ifdef __cplusplus
extern "C" {
    void abort(void);
#endif
    void main(void);
#ifdef __cplusplus
}
#endif

__cplusplusは、C++言語をコンパイルするときに、コンパイラが自動的に定義するマクロと解釈してください。
つまり、当該プログラムの解釈は、

(a)
C++言語の場合
extern "C" {
    void abort(void);
    void main(void);
}

extern "C" 宣言が付加され、abort関数のプロトタイプ宣言が追加されます。
これは、以下の場合にabort関数が呼ばれるためです。

  • 例外処理が正しく動作しなかった場合
  • 純粋仮想関数自体をコールした場合
  • dynamic_castに失敗した場合
  • クラス配列のdelete時に情報が取れなかった場合
  • クラスオブジェクトのデストラクタコール情報登録時に矛盾が発生した場合
(b)
C言語の場合
main関数のプロトタイプ宣言のみとなります。
void main(void);

abort関数は、Cリンケージで宣言する必要があるため、C++言語ではextern "C"を付加したプログラムを出力します。

適用製品

High-performance Embedded Workshop
他にご質問がございましたら、リクエストを送信してください