2016-10-17 9 views
1

私はC++の学習者です。より大きなプロジェクトでコンパイルプロセスを高速化するためにコードを複数のファイルに分割するコンセプトに出くわしました。C++リンカーはどのような.cppファイルを使用するかを知っています

しかし、この本は私には言いませんが、私は他の本やウェブで見つけようとしましたが、幸運にもリンカー(コンパイル時)がどのようなファイルを含んでいるか知っています。

私は新しいファイルを作成するときに、ヘッダをメインファイルに#include "newfile.h"で接続しますが、このヘッダでは関数の定義の場所を書きません。

どのように私はプロセスがメインファイルから始まり、そこに他のファイルとの「接続」があると思いますか?問題は、私が見たところでヘッダーファイルと同じ名前を付ける必要がないそれらの.cppファイルを見つける方法です。

Exmple:

メインファイル:

#include <iostream> 
#include "krneki_H.h" 

using namespace std; 


int main() 
{ 
krneki1(); 
krneki2(); 
krneki3(); 
} 

とヘッダファイル:

void krneki1(); 
void krneki2(); 
void krneki3(); 

また、新しい.cppファイル:

#include <iostream> 
#include "krneki_H.h" 

using namespace std; 

void krneki1() { 
cout<<"Krneki1"<<endl;} 

void krneki2() { 
cout<<"Krneki2"<<endl;} 

void krneki3() { 
cout<<"Krneki3"<<endl;} 

第2のcppファイルを使用するように指示がないことに注意してください。それは単にそれを使用することを知っています。マップ内のすべての.cppファイルを検索しますか?

ありがとうございました。

+0

迷惑メールにしないでください! Cは別の言語です! – Olaf

+3

何も知らない。リンクするファイルを教えてください。 – tkausl

+0

リンカはソースコードをまったく使用しません。プログラマはリンカに必要なファイルを教えなければなりませんが、 '.cpp'や' .h'ファイルではなくコンパイルされたバイナリファイルです。 – Galik

答えて

0

いいえ、それを使用するだけではわかりません。あなたの例では、main.cppでコンパイルし、その新しいcppファイルがなければ、 "未定義の参照"エラーが発生します。

何が起こるかは、すべてのcppファイルを自動的にコンパイルする素晴らしいIDEを使用していることです。それはあなたのメイクファイルにデフォルトですべて含まれています。

メイクファイルをゼロからデザインし、関数の実装を含むcppファイルを含めないと、 "未定義の参照"エラーがどのように発生するかを自分で確認することをお勧めします。

5

あなたはgcc -cを使用して、両方の.cppファイルまたは類似のコマンドラインをコンパイルして、リンカに生産さ.oファイルの両方に合格。リンカーは、別の.cppファイルをコンパイルしたいと魔法のようには判断しません。

あなたのIDEには、それはあなたのプロジェクトに追加されたすべての.cppファイルをコンパイルした場合には、自動的にこれらの詳細の世話をすることがあり

gcc -c main.cpp -o main.o   # compile 
gcc -c krneki_H.cpp -o krneki_H.o # compile 
gcc main.o krneki_H.o -o main  # link 

たとえば、その後、コンパイル手順によって生成されたすべての.oのファイルがリンクしています。

関連する問題