Iは、同じ名前と異なるパラメータを有する2つの関数を定義する2つのヘッダファイルを有しています。私はcが関数のオーバーロードをサポートしていないことを知っていますが、関数宣言にstaticを追加すると、同じ名前の2つの関数を同じソースファイルでしかアクセスできないという警告で宣言できます。とにかくそれは動作していないと私はなぜ分からないのですか?私の理解は間違っていますか?静的および複数の機能の異なるヘッダ内
例:
static bool do_something(char b);
main.cppには、両方のヘッダが含まれています:
static bool do_something(int a);
file2.h機能下記た: file1.hは、以下の機能を有する
#include "file1.h"
#include "file2.h"
エラーの例:
事前にのfile1.h:26:13: error: conflicting types for ‘do_something’
static bool do_something(int a);
file2.h:23:13: note: previous declaration of ‘do_something’ was here
static bool do_something(char b);
感謝。
「静的」なんて違いはありますか?これは矛盾した宣言です。 – coderredoc
ヘッダファイルに 'static'関数を宣言するのはあまり意味がありません。 –
主な理由は、同じ名前が2回現れた場合、実行ファイルを作成するときにCが関数名を使用してリンクを識別するために関数名を使用するためです。リンカーはどちらが良いものか分かりません。私は '静的'がC言語でのmanglingに何らかの影響を与えるとは思わないし、ODR(一つの定義ルール)に従わなければならない。どちらの場合でも、 'main.cpp'ファイルには両方のファイルが含まれているので、あなたの考えはあなたのケースではうまくいかないので、' main.cpp'の視点から見て2つの目に見える相反する定義があります。異なるソースファイルから使用された場合、リンカが1つの関数に不平を言うかどうかはわかりません。 – Phil1970