2017-03-13 6 views
0

私は初心者レベルのCプログラマです。高レベルの言語から来て、cのような気がフラットな構造です。パッケージをシミュレートする方法があるので、プレフィックスを必要とせずにクリーンな名前空間を持つことができます。名前空間またはCモジュールのパッケージ

入れ子構造は私が見ているものです。

他社製の外部ライブラリとの動作は、名前が競合している場合や別の種類の場合にどうなりますか。

ライブラリまたはライブラリにリンクされたマルチモジュールアプリケーションをビルドしなければならない場合は、各モジュールに別のモジュールと同じ変数、関数、または構造体の名前を付けることができます。

また、競合する名前を持つ2つのサードパーティのライブラリ(.aファイルなど)とリンクしている場合、そのような競合をどのように解決しますか。

+2

プレフィックスは不要ですか?いいえ、これはあなたが使っているCです。 –

+0

CはC++ではありません – minigeek

+0

はい、C言語ではなく、名前の衝突を避けるために、独自の分離領域を持つマルチモジュールアプリの戦略です。あなたの助けに感謝。私はCで多くの経験を持っていないので、仮定のために修正してください。 –

答えて

0

技術的には、C++とまったく同じ方法で名前空間を使用する方法はありません。残念ながら、これはSDL2のようなものにつながります。これは、すべての関数の前に "SDL_"が付いています。外部ライブラリ間の競合を解決するには、1つの解決策があります。ライブラリ「libfoo」があるとします。このライブラリは、関数が

void do_foo(void *); 

と定義されています。あなたはあなたのプログラムをコンパイルしてリンクしようとしますが、あなたが使っている他のライブラリ "libfu"もこの機能を持っています。さて、私は、適切なプレフィックスで関数の名前を変更したアダプタライブラリを作成することになります。だから我々はすべてこの関数はない機能

void FOO_do_foo(void *); 

と「libfoo_f.c」での定義ファイル「libfoo_f.h」

#include"libfoo_f.h" 
#include<libfoo.h> 
void FOO_do_foo(void *data) 
{ 
    do_foo(data); 
} 

を持つことになり壊すことなく、今libfooのdo_fooにアクセスする方法を提供していますあなたの図書館。正直なところ、私は、ほとんどの図書館が他の図書館と競合することのない構造化された、よく名づけられたインターフェースを持っているという事実のためにこれを行う必要はなかった。

関連する問題