プロが教えるわが家の防犯対策術!

お世話になります。

Cで作成したファイルをビルドしたときに、エラーや警告ではないですが、
「Warning: パブリックシンボル _new_file がモジュール D:\MY DOCUMENTS\作業用フォルダ\MAIN.OBJ と D:\MY DOCUMENTS\作業用フォルダ\NEW_FILE.OBJ の両方に定義されている」
というメッセージが表示されます。
これは別にあってもなくても、プログラム自体は正常に動作するのですが、
なんとなくのどに物が詰まった感じがして嫌です。
そこで質問ですが、

1.この「パブリックシンボル」とは何か?
2.これが表示される原因は何か?

の2点について、お答えいただけませんでしょうか。
よろしくお願いいたします。

A 回答 (2件)

>何をもって定義とされているかを見つけられずに苦しんでいます。


>いや、苦しむほどの問題というわけではないんですが。

たとえば、
1.両方のソースでstaticではない同じ名前の関数が存在する。

2.両方のソースにstaticではない同じ名前のグローバルな変数が宣言されている。

3.externがついていない変数の宣言がヘッダーファイル中で行われていて、そのヘッダーファイルを両方のソースがインクルードしている。

て、とこでしょう。


ようは、両方のソースをコンパイルして出来たobj中に、同じ名前のを持つ変数や関数があるよというリンカーの警告です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
なんとなくですが、理解できました。

今回はちょっと時間が無いので、応急処置的にですが、
ご指摘の通り2つのファイルを一つにまとめると問題解決しましたので、
しばらくはこれでやっていこうと思います。

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

お礼日時:2002/07/29 21:13

>Cで作成したファイルをビルドしたときに、エラーや警告ではないですが、


あのー、"Warning"って警告なんですけど・・・


パブリックシンボルは、外部からも参照可能な変数や関数などのことです。

つまり、_new_fileがMAIN.C、NEW_FILE.Cの両方で定義されていますという警告です。

変数名か、関数名かはわかりませんが。

この回答への補足

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

>あのー、"Warning"って警告なんですけど・・・
そうかもしれないなとか思いながら投稿してしまいました(笑)

うーん。
つまり、どういうことなんでしょう・・・。
両方で定義されていますっていうのはメッセージにも出てきてたのでわかるんですが、
何をもって定義とされているかを見つけられずに苦しんでいます。
いや、苦しむほどの問題というわけではないんですが。

補足日時:2002/07/29 19:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!