CとC++のことで少しはまったことがあったので質問です。
はまった部分を単純化して例を挙げます。

1.単純化した例
FuncC.c
#include <stdio.h>

void Func(void) { puts("FuncC"); }

FuncCpp.cpp
#include <stdio.h>

void Func(void) { puts("FuncCpp"); }

main.c
void Func(void);

int main(void) { Func(); return 0; }

上記3つのファイルを gcc *.c *.cpp でコンパイルリンクするとFuncC.cのFuncが呼ばれます。
main.cをmain.cppに名前を変更して同じことをするとFuncCpp.cppのFuncが呼ばれます。
clでも試しましたが同じ結果です。

2.はまったこと
拡張子によって呼ばれる関数が違うことに気づかず延々と的外れなことをやっていた。

3.知りたいこと
1の結果がなぜそうなるのかちゃんとは分かっていません。
なぜそうなるのか分かるサイト等あれば教えてもらえませんか?