北海道に住みたいと言っているだけのブログ

CからC++の関数を呼ぶ

混乱しがちなのでメモ.

/* メインプログラム (C) */
extern void baby(void);

int main(int argc, char *argv[]) {
  baby();
  return 0;
}
/* baby() が記述されているC++プログラム */
#include <iostream>

#ifdef __cplusplus
extern "C" {
#endif

void baby(void);

#ifdef __cplusplus
}
#endif

void baby(void) {
  std::cout << "baby!!" << std::endl;
}


CのプログラムはgccC++の方はg++でコンパイルし,最後にg++でC++のオブジェクトファイルをリンクすればOK.
間違いは,メインプログラム側のプロトタイプコールでextern "C"としちゃうこと.