【C++】リンカー
リンカー
宣言(declaration)
以下のような関数を宣言すると、コンパイラにMyPrint(symbol)という関数が存在する(function exists)ということを伝える。
void MyPrint(std::string const& msg);
定義(definition)
void MyPrint(std::string const& msg)
{
std::cout << msg << std::endl;
}
リンカーの挙動1
MyPrintの定義が存在しないが、MyPrintを使用している箇所がないためリンカーが探しにいくことはない。
#include <iostream>
void MyPrint(std::string const& msg);
int Addition(int a, int b) {
// MyPrint("Use Addition");
return a + b;
};
int main() {
auto t = Addition(1, 2);
}
リンカーの挙動2
一見すると、リンカーの挙動1と同様に、コンパイルもビルドも成功するように思えるが、ビルド時にリンキングエラーが発生する。
これは、ファイル内でAdditionが使用されていないということは、他のファイルで使用される可能性があるため、リンカーがMyPrintを探すため。
#include <iostream>
void MyPrint(std::string const& msg);
int Addition(int a, int b) {
MyPrint("Use Addition");
return a + b;
};
int main() {
//auto t = Addition(1, 2);
}