主な質問です:Cコンパイラは、異なるソースコード内の関数の主のために複数の定義を処理しない方法は? ように:Cコンパイラはどのように異なるメイン関数定義を扱いますか?
無効メイン(無効)
int型メイン(無効)
int型のmain(int型のargc、charは* ARGV []) ...
私にはわかりませんこれは、ためにCコードがEXTERN「C」を使用せずにC++コードにリンクされているだけでなく、私は、Linuxのプログラマのマニュアル(シェル上の単なるmanコマンド)を介して照会された場合にのみ発生することが、名前の符号化とは何かを持っている場合関数open(man 2 open)とそれに対して2つの署名が表示されます:
OPEN(2)Linuxのプログラマーズ・マニュアル
NAME
open, creat - open and possibly create a file or device
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
どのようにこの仕事はできますか?メイン関数の定義と同様に扱われますか?文字通り
メインの複数の宣言が異なる型か複数の定義であることを意味するのだろうかと思います。あなたの行動がはっきりしていないサンプルコード(あなた自身のプログラム)を与えれば助けになります。また、[linux]と[C++]との関係も不明です。 – PJTraill
リンカの制限に対応するために、名前のマングリングはCの名前に起こるのではなく、オーバーロードされたC++の名前に起こります。そのため、Cコンパイラ(そしておそらくリンカ)があなたのプログラムで行うことには関係しません。 – PJTraill
これは有効なCコードではありません。 CとC++は**異なる**言語です!同一の構文/文法であっても、異なるセマンティクスを持つことができます。 – Olaf