C言語関係掲示板

過去ログ

No.1029 CとC++の連携について

[戻る] [ホームページ]
No.13179

CとC++の連携について
投稿者---ton(2004/03/15 20:49:54)


はじめまして。Cの勉強を始めたばかりのtonといいます。
質問なのですが、C++でCの関数を使用したいのですが、
undefined reference to `testPrint'
と出てしまい、makeできません。
Googleで検索して見よう見まねで書いてみたのですが・・・
アドバイス頂ければ幸いです。

#【testc.h】
extern void testPrint(void);

#【testc.c】
extern void testPrint(void){
printf("TEST\n");
}

#【testcc.cc】
#include <stdio.h>

extern "C" {
#include "testc.h"
}
int main(void){
testPrint();
}

#【Makefile】
test.exe : testcc.o testc.o
g++ -o test.exe testcc.cc

testcc.o : testcc.cc
g++ testcc.cc

testc.o : testc.c
gcc testc.c


宜しくお願い致します。

No.13185

Re:CとC++の連携について
投稿者---RAPT(2004/03/16 02:00:58)


> #【testc.c】
> extern void testPrint(void){
>   printf("TEST\n");
> }
詳しい事は知らないけど、

void testPrint(void){
  printf("TEST\n");
}

では? extern だと、実体じゃないよ、ってことになるので。
# 最近 extern 使わないので忘れました。間違ってたらごめんなさい。


No.13190

Re:CとC++の連携について
投稿者---YuO(2004/03/16 04:21:26)


> では? extern だと、実体じゃないよ、ってことになるので。

関数定義において,externはあっても無くても一緒です。

ファイル有効範囲を持つオブジェクトの識別子の宣言において,
初期化子が無く,外部結合を持つ場合においては定義でなくなりますが……。

ちなみに,
extern int a = 0;
は外部オブジェクト定義になり,実体が確保されます。
#これはISO/IEC 9899:1990, 9899:1999, 14882:1998, 14882:2003全てで言えること。


No.13226

Re:CとC++の連携について
投稿者---RAPT(2004/03/18 01:45:44)


あらら、やはり嘘言っていましたか。すみません>質問者

修正ありがとうございます>YuOさん

extern int value = 0;
で実体確保されることは知りませんでした。
# いつも+αの知識をありがたく思っています。

No.13187

Re:CとC++の連携について
投稿者---かずま(2004/03/16 02:15:42)


Makefile がおかしい。

test.exe : testcc.o testc.o
    g++ -o test.exe testcc.o testc.o

testcc.o : testcc.cc
    g++ -c testcc.cc

testc.o : testc.c
    gcc -c testc.c


No.13191

Re:CとC++の連携について
投稿者---ton(2004/03/16 08:38:33)


RAPTさん、YuOさん、かずまさん
返信ありがとうございます。

確かにmakefileが間違えていました。
お蔭様で無事makeできました。
私もmakefileが間違っている?と思い、
ld使って
test.exe : testcc.o testc.o
 g++ -o test.exe testcc.o testc.o
 ld -o test.exe testc.o
等試していたのですが、見当違いでした・・・
もっと勉強しないと・・・

皆さん本当にありがとうございました。