【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22520

externって?
投稿者---ひろし(2005/08/08 23:42:11)


初めまして質問です
教科書にも記載が無いので来ました
【extern】の意味概要・使い方を教えて頂けないでしょうか




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:externって? 22521 まきじ 2005/08/08 23:49:12


No.22521

Re:externって?
投稿者---まきじ(2005/08/08 23:49:12)


>【extern】の意味概要・使い方を教えて頂けないでしょうか

外部リンケージを持たせる。

複数のファイルで同じ変数を使用したい場合に、1 つのファイルに
変数を定義して、残りのファイルには、extern を付けて宣言する。


この投稿にコメントする

削除パスワード

No.22522

Re:externって?
投稿者---ひろし(2005/08/09 00:05:28)


有り難うございます。
よく理解する事ができました。



この投稿にコメントする

削除パスワード

No.22523

Re:externって?
投稿者---エートリーぶ(2005/08/09 00:05:41)



使い方とかは↓も参考になるのでは?
http://homepage1.nifty.com/aok2/004/c01.html



この投稿にコメントする

削除パスワード

No.22524

Re:externって?
投稿者---ひろし(2005/08/09 00:16:04)


有り難うございます。
勉強になります。



この投稿にコメントする

削除パスワード

No.22527

Re:externって?
投稿者---かずま(2005/08/09 02:23:06)


> 外部リンケージを持たせる。

それでは、次のプログラムがエラーにならないことが説明できませんよ。
#include <stdio.h>

static int a = 5;
extern int a;

int main(void)
{
    printf("a = %d\n", a);
    return 0;
}



この投稿にコメントする

削除パスワード

No.22530

Re:externって?
投稿者---まきじ(2005/08/09 11:14:20)


>それでは、次のプログラムがエラーにならないことが説明できませんよ。

X3010 6.2.2 から引用

「以前の宣言において内部結合又は外部結合が指定されているならば、新しい宣言における
識別子は、以前の宣言と同じ結合もつ」

という事なので、「a は static (内部結合)を持つ」という事で
よろしいでしょうか?(extern は無効)


この投稿にコメントする

削除パスワード

No.22537

Re:externって?
投稿者---NykR(2005/08/09 18:45:34)


>          (extern は無効)

「無効」ではありません。内部結合を持つ識別子の有効な宣言です。


#include <stdio.h>

static char     str[] = "内部結合";

int main(void)
{
  static char   str[] = "無結合";

  {
    extern char str[]; /* externが無効なら不完全型になってしまう */
    puts(str);
  }

  return 0;
}



この投稿にコメントする

削除パスワード

No.22538

Re:externって?
投稿者---NykR(2005/08/09 20:38:53)


補足
    extern char str[]; /* externが無効なら不完全型になってしまう */
    puts(str);


宣言そのものが無効なら puts(str);で

無結合

と表示されるはずですがそうはなりません。


この投稿にコメントする

削除パスワード

No.22539

Re:externって?
投稿者---まきじ(2005/08/09 22:00:57)


>宣言そのものが無効なら puts(str);で
>無結合
>と表示されるはずですがそうはなりません。

その通りです。
やっと理解できました。

#include <stdio.h>

(1)ファイル有効範囲の識別子に static 指定などで 内部結合
static char     str[] = "内部結合"; (1)

int main(void)
{
  (2)ブロック有効範囲の識別子なので無結合
  static char   str[] = "無結合";(2)

  {
   (3)以前の宣言で、内部結合又は外部結合、指定されてる場合は
   以前の宣言と同じ結合を持つ。(2) は無結合なので (1) と同じ
   内部結合になり、(1) と同じオブジェクトを参照する。
    extern char str[];(3)
    puts(str);
  }

  return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧