11.2 CプログラムをC++コンパイラでコンパイルするときの注意事項

(1)

関数原型

関数を使用する前に関数原型が必要です。そのときには、仮引数の型も必ず宣言してください。

extern void func1();
void g()
{
    func1(1); // エラー
}
extern void func1(int);
void g()
{
    func1(1); // OK
}

(2)

constオブジェクトのリンケージ

constオブジェクトのリンケージは、Cプログラムでは外部結合であるのに対し、C++プログラムでは内部結合になります。また、constオブジェクトは初期値を必要とします。

const cvalue1;     // エラー
 
const cvalue2 = 1; // 内部結合
const cvalue1 = 0;        // 初期値を与えます
 
extern const cvalue2 = 1; // Cプログラムと同様に外部結合になります

(3)

void*からの代入

C++プログラムでは、明示的なキャストを用いないと他のオブジェクト型へのポインタ(関数へのポインタ、メンバへのポインタを除く)へ代入できません。

void func(void *ptrv, int *ptri)
{
    ptri = ptrv; // エラー
}
void func(void *ptrv, int *ptri)
{
    ptri = (int *)ptrv; // OK
}