2016-04-04 11 views
4

私は自分のオペレーティングシステムクラスに対して異なるページ置換アルゴリズムを実装するための宿題を手掛けています。私はに実行している問題は、私は別のCファイル内の各アルゴリズムを実装したいということで、私はコンパイル時に個々のファイルの中に、など、search()insert()updatePageTable()ようしかし別のCファイルの関数を1つだけ含める方法

同じ関数名を使用しますファイルをコンパイルすると、重複するシンボルについて不平を言う。メインのテスト関数をそれぞれの異なるアルゴリズムファイルからインポートし、それらの関数がファイルの関数を参照するようにする方法はありますか?

+0

[このXY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の代わりに実際の問題を説明できますか? –

+3

ファイル内の関数を 'static'と宣言することで隠すことができます。これは良い習慣です。あなたは隠されていない少なくとも1つの関数を持っています(時には 'main()'になることもありますが、時には他の関数になることもあります)。非静的関数が 'main()'でなければ、その関数を宣言するヘッダを持つべきです。ヘッダーは、定義が宣言と一致するように関数が実装されている場所で使用し、ヘッダーは関数が正しく使用されるようにするために関数を使用する場所で使用する必要があります。 –

+0

与えられたプログラムは、与えられた関数名の外部から見える定義を1つだけ含むことができます。つまり、 'insert()'と呼ばれるグローバルな(外部から見える)関数を定義するファイルはたかだか1つだけですが、 'insert()'という静的関数を定義するファイルがたくさんあるかもしれませんが、グローバル関数を宣言したり、宣言したりしています。 –

答えて

2

コメントを12に回答しました。

ファイル内の機能を非表示にするには、staticを指定します。これは良い習慣です。隠されていない少なくとも1つの機能があります(時にはmain()になることもありますが、時には他の機能になることもあります)。非静的関数がmain()でない場合は、その関数を宣言するヘッダーが必要です。ヘッダーは、定義が宣言と一致するように関数が実装されている場所で使用し、ヘッダーは関数が正しく使用されるようにするために関数を使用する場所で使用する必要があります。

与えられたプログラムには、任意の関数名の外部から見える定義を1つだけ含めることができます。つまり、insert()というグローバルな(外部から見える)関数を定義するファイルは1つしかないかもしれませんが、insert()という静的関数を定義するファイルがたくさんあるかもしれませんが、これらのファイルは参照できない、グローバル関数です。指定されたソースファイルは、グローバル関数insert()にアクセスすることも、独自の静的関数insert()にアクセスすることもできますが、両方にアクセスすることはできません。

関連する問題