• ベストアンサー

同じ名前の外部変数定義

C言語で、何個かのファイルに同じ型、同じ名前のstatic型の外部変数定義があっても大丈夫ですか? static型でなかったら駄目だと思うのですが、static型ならいい気もしてきて悩んでます。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

staticな大域変数は、ファイルの中が有効範囲なので、ファイルが違えば(同じ名前でも)大丈夫です。

BIGMON
質問者

お礼

ありがとうございます。これで安心しました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

使えます。 bcc5.5.1 gcc 2.95.3 VC++7.1 で調べてみましたが問題ありませんでした。 コード的には気持ち悪いですけど。

BIGMON
質問者

お礼

ありがとうございます。自分でやってみても問題ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数ファイルによる共通の外部変数定義について

    初歩的な質問なのですが、今各関数をファイルごとに分けて記述しようとしています。 ここで詰まっているのでできればご教授お願いします ファイル構成は プログラムファイル main.cpp sub.cpp ヘッダーファイル  myheader.h(main.cppとsub.cpp両方でインクルード) ヘッダーファイルには両方のプログラムファイルで使う変数が定義してあります。 それでmain.cppとsub.cpp両方で同じ変数を使いたいのですがコンパイルエラーが発生してしまいます。 内容はsub.obj側で「i(共通のループカウンタ)はmain.objですでに定義されています」というものです。 とにかく私のやりたいことはヘッダーに外部変数を定義して両方のプログラムファイルで使いたいというものです。 もしかしたらファイルを分けるにも何か設定が必要なのでしょうか? 私はただ[プロジェクト]→[プロジェクトに追加]→[新規作成]でソースファイルを作っているだけなんですが・・・ 上記の状態を回避する方法はあるのでしょうか?

  • 分割ファイルでstatic変数はどのようにすれば良いのでしょうか?

    1つのファイルでstatic変数を使っている場合は気にしていなかったのですが、分割ファイルにした場合、static変数はどのようにすれば各ファイルで利用できるのでしょうか? 通常のグローバル変数の場合はexternとすれば良かったのですが方法がかわりません。 ** test1.cpp static int a; ** test2.cpp ?????? (二重定義になる) あと1ファイルから分割ファイルにした場合に気をつけるべき点など詳しい方教えて下さい。

  • エクセルで外部データの取り込みの際の「名前の定義」について。

    エクセルで外部データの取り込みの際の「名前の定義」について。 エクセルのテキストファイルウィザードでCSVファイル等の外部データを取り込むと、その範囲に「名前の定義」が自動的にできますが、この名前が"ExternalData_1"となる場合と、外部データのファイルになる場合があるようです。 この違いは何でしょうか? 数日前にエクセル2003でCSVファイルを取り込んだときは"ExternalData_1"でした。 昨日エクセル2000で別のCSVファイルでやってみても"ExternalData_1"だったと思います。 しかし、今日、数日前と同じ2003で、数日前と同じCSVファイルで取り込んだら、"CSV10000"というファイル名で名前が定義されてしまいました。 非常に不思議です。 原因を思い当たる方、いらっしゃいましたらご教示ください。 取り込み範囲の名前の定義を、取り込み後のVBAコードで使用するため、名前がつき方が不定だとまずいのです。

  • c言語で定義する変数のアドレス

    c言語の超初心者です。追いえてください。 c言語で2つの変数を定義しています。 char *a; char *b; この2つの変数に値をいれた際の動作で以下のようなことって発生しますか? a="1111" b="2222" aをprintfするとbにいれた値"2222"が表示される。

  • 識別子の外部結合について

    識別子について調べていてわからないことがあり 質問させて頂きます。 以下のコードの場合変数aは外部結合ですか それとも外部結合以外となるのでしょうか。 識別子の宣言に対し同一ソースファイル内の関数内で その識別子の定義がある場合、その識別子は外部結合か どうかが知りたいのです。 ご存じの方すいませんがよろしくお願いします。 --test.c-- static int a; main() { ・・・ } function1() { a = 1; ・・・ } function2() { a = 1; ・・・ }

  • ユーザー定義型変数の一括初期化

    ユーザー定義型の変数を初期化する場合、 各エレメントごとに初期化をすればいいのですが、 C言語のmemset()の様に、一括で初期化をする方法はありますか?

  • 変数の型を定義しなかった場合どうなりますか?

    現在、VBAを使ってプログラミングを行っているところなのですが、 一般的に、プログラムの最初で変数に対してintegerやlongといった型を定義してから使うというように教わりますが、このように型を定義しなくとも使うことが出来ます。もし定義しなかった場合、その変数の型は何に設定されているのでしょうか? では型を定義するメリット及び、せずに使った場合のデメリットは何なのでしょうか? 私が使っているのはVBAですが、他の言語では型を定義しなければ、その変数を使うことが出来ないというようなものもあるのでしょうか?

  • DLL内からの外部変数の参照

    BCC(フリーコンパイラ)で、WindowsAPIを使った プログラムを作成しています。その過程で、DLLを 作成しているのですが、 test.c を、 bcc32 -WD test.c とし、test.dllを作成しました。 さらにそれを、 implib test.lib test.dll で、test.libを作成ました。 ところが、おなじtest.cファイルで、ほかのファイル の変数を参照しようとして、extern HWND hWnd と書き加えたところ、bcc32 -WD で、参照先が見つか らないというエラーが起こり、DLLが作成できなく なってしまいました。 DLL内から外部の変数を参照するにはどうしたらよいで しょうか。この場合の外部の変数というのは、WinMain 関数のあるmain.cファイル内の静的変数です。 よろしくお願いいたします。

  • Static変数の必然性について

     今晩は、Cの初心者です、宜しくお願いします。    Global変数とStatic変数の違いがよく分かりせん。  本を読むと、Global変数は「常に同じメモリ上に置かれどの関数からも使用できる」、Static変数は「常に同じ メモリ上に置かれ定義された関数からのみ使用できる」とかいています。  Global変数がどのようなもので、その必要性みたいなものは理解出来るのですが、Static変数については、 Global変数との違い、その必要性、実際にどのような場合に使うのかその必然性みたいものがあるのか理解できません。  いくら本を読んでも、理解出来ないのですが、宜しくご教示願います。

  • 文字列のメンバ変数を外部変数のように扱いたい

    済みません。質問なのですが、 メンバ変数を外部変数のように扱うにはどうしたらよいのでしょうか? int型などの場合、 class test{ static const int a; }; const int test::a = 10; とすればよいですよね? これをcharの配列にして class test{ static char a[7][32]; }; char test::a[0] = "test"; とすると サイズが0の配列を割り当てまたは宣言しようとしました というコンパイルエラーがでてしまいます…。 多次元配列の場合はstatic変数としてもてないのでしょうか? char** として宣言してもどこでnewを行えばよいか解りません。 コンストラクタの中で行えば そこでstaticではなくなってしまいますし…。 後、できればstringクラスの配列で持ちたいのですが #include <string> class test{ static string test[7]; }; string test::test[0] = "aaa"; なんてことができますでしょうか? 質問内容が解りにくいかも知れませんが どうか教えてください。 宜しくお願いいたします。

このQ&Aのポイント
  • 【MFC-J904N】のFAXについて、送信は問題なくできるが受信ができないという問題が発生しています。既存の解決策を試しましたが、解決しない状況です。
  • NTT東日本のひかり回線を使用しており、FAXの受信モードは正しく設定されています。ただし、受信音はならず、受信したいファックスが本体に届きません。
  • 注意点として、NTT東日本のFAXお知らせメールは正常に受信できるため、通信回線自体に問題はない可能性があります。
回答を見る