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

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

 詳しくはこちら


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

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


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

No.23049

構造体のグローバル変数
投稿者---あきき(2005/09/13 22:04:48)


例えば、以下の様に、グローバル変数として、DATAを定義した時
プログラムを作成する時、または修正するときにバグが発生しやすいのでしょうか?もしそうだとしたら、例えば、main()内で構造体を宣言した方がよいでしょうか?
 その使い分けがあるのならば、どんな時にした方がいいのか教授願います。今調べています。

DATAはファイル内のデータとします。

typedef struct t_tag {
    int  a;
    char b;
    long c;
}DATA;

int  main( void )
{
    //構文;

    return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体のグローバル変数 23050 nop 2005/09/13 22:25:44
<子記事> Re:構造体のグローバル変数 23051 れいじ 2005/09/13 22:40:46
<子記事> Re:構造体のグローバル変数 23052 επιστημη 2005/09/13 22:50:56
<子記事> Re:構造体のグローバル変数 23054 あきき 2005/09/13 23:00:37


No.23050

Re:構造体のグローバル変数
投稿者---nop(2005/09/13 22:25:44)


>例えば、以下の様に、グローバル変数として、DATAを定義した時
>typedef struct t_tag {
>    int  a;
>    char b;
>    long c;
>}DATA;
>
>int  main( void )
>{
>    //構文;
>    return 0;
>}


どこにも、グローバル変数が定義されていませんよ?
「struct t_tag」と言う構造体型に「DATA」と言う別名を定義しているだけです。


この投稿にコメントする

削除パスワード

No.23051

Re:構造体のグローバル変数
投稿者---れいじ(2005/09/13 22:40:46)


typedefについて、調べてはいかがですか?
別名をつけるだけで、変数の定義はされていません。


この投稿にコメントする

削除パスワード

No.23052

Re:構造体のグローバル変数
投稿者---επιστημη(2005/09/13 22:50:56)


いついかなるときもグローバル変数は避けるが吉。



この投稿にコメントする

削除パスワード

No.23054

Re:構造体のグローバル変数
投稿者---あきき(2005/09/13 23:00:37)


すみません、DATAの変数設定を行うのを忘れました。構造体の初期化は以下の通りでよかったかどうか曖昧な点がありますが、違っていましたら正しい初期化を教えてください。

>>
typedef struct t_tag {
    int  a;
    char b;
    long c;
}DATA;

DATA = {{0},{'\0'},{0}};
int  main( void )
{
    //構文;

    return 0;
}




この投稿にコメントする

削除パスワード

No.23055

Re:構造体のグローバル変数
投稿者---επιστημη(2005/09/13 23:04:40)


> 構造体の初期化は以下の通りでよかったかどうか曖昧な点がありますが、違っていましたら正しい初期化を教えてください。

なぜコンパイルして確かめない?



この投稿にコメントする

削除パスワード

No.23056

Re:構造体のグローバル変数
投稿者---あきき(2005/09/13 23:21:23)


>なぜコンパイルして確かめない?

ごもっともでした。しかも、コンパイルエラーで。。修正したら、予想した結果を得られました。

結果 0 (NULL) 0


この投稿にコメントする

削除パスワード

No.23058

Re:構造体のグローバル変数
投稿者---まきじ(2005/09/14 00:25:54)


>修正したら、予想した結果を得られました。
>結果 0 (NULL) 0

もし良ければ、修正したソースを載せ下さい。


この投稿にコメントする

削除パスワード

No.23083

Re:構造体のグローバル変数
投稿者---あきき(2005/09/14 19:04:43)


ソースは以下の通りです。構造体の初期化については、以前、まきじさんが掲載したものを参考にさせていただきました。

#include <stdio.h>

typedef struct t_tag {
    int  a;
    char b;
    long c;
}DATA;

DATA tag = {
    {0},
    {'\0'},
    {0}
};

int  main( void )
{
    printf("%d %s %ld\n", tag.a, tag.b, tag.c);

    return 0;
}


ついでなんですが、επιστημηさんのアドバイスでは、
"いついかなるときもグローバル変数は避けるが吉。"でしたが、私も極力避けた方がいいと思っています。しかし、あえてグローバル変数を使うとしたらどの様な時でしょうか



この投稿にコメントする

削除パスワード

No.23084

Re:構造体のグローバル変数
投稿者---こん!(2005/09/14 20:00:47)


>しかし、あえてグローバル変数を使うとしたらどの様な時でしょうか

ここの管理人さんはこの様に解説されています。

通用範囲


この投稿にコメントする

削除パスワード

No.23086

Re:構造体のグローバル変数
投稿者---とろり(2005/09/14 20:12:06)


>あえてグローバル変数を使うとしたらどの様な時でしょうか

個人的にはプログラムの開始(直後)から終了まで値を変えないことを前提に確保される変数などには有用と考えています。
例えば、INIファイルを展開した時のメモリのアドレスを格納しておくとかですかね。



この投稿にコメントする

削除パスワード

No.23094

あり
投稿者---あきき(2005/09/14 22:36:39)


こん!さん、とろりさんどうもありがとうございました。グローバル変数に対する疑問が一気に解決しました。


この投稿にコメントする

削除パスワード

No.23095

Re:ありがとうございます
投稿者---あきき(2005/09/14 22:38:10)


>タイトルにミス!!
こん!さん、とろりさんどうもありがとうございました。グローバル変数に対する疑問が一気に解決しました。



この投稿にコメントする

削除パスワード

No.23098

Re:構造体のグローバル変数
投稿者---RAPT(2005/09/14 23:34:31)


あえてグローバル変数を使うとしたらどの様な時でしょうか
#define MAX_COUNT 100 の代わりに static const int MAX_COUNT = 100; とか?



この投稿にコメントする

削除パスワード

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