C言語関係掲示板

過去ログ

No.529.static変数はなぜ引数で初期化できないのですか?

[戻る] [ホームページ]
No.4220

staticの引数での初期化
投稿者---mtk(2003/01/07 16:48:48)


どうも、はじめまして。

static変数はなぜ引数で初期化できないのですか?

#include<stdio.h>

int main(int argc, char **argv)
{
    char **a=argv;
    
    while(argc--)
        puts(*a++);
    
    return 0;
}


このプログラムの a を static で修飾すると、不正な初期化というエラーがでて、
コンパイルできません。
よろしくお願いします。

No.4221

Re:staticの引数での初期化
投稿者---Zzz...(2003/01/07 17:05:19)

#include<stdio.h>

int main(int argc, char **argv)
{
    static char **a = argv;
    
    while(argc--)
        puts(*a++);
    
    return 0;
}
こうですよね?
何のエラーもでないでコンパイルできたんですが...

No.4225

Re:staticの引数での初期化
投稿者---mtk(2003/01/07 17:45:44)


>こうですよね?
>何のエラーもでないでコンパイルできたんですが...

どうやら、処理系依存というヤツでしょうか。
そうだとすると、Windows 2000, Borland C++ Compiler 5.5 です。

No.4228

Re:staticの引数での初期化
投稿者---Zzz...(2003/01/07 19:18:08)


>どうやら、処理系依存というヤツでしょうか。
>そうだとすると、Windows 2000, Borland C++ Compiler 5.5 です。
そうなんですかね?
僕のは, Windows Me, Visual C++ 6.0です

No.4231

Re:staticの引数での初期化
投稿者---かずま(2003/01/07 20:56:13)


> 何のエラーもでないでコンパイルできたんですが...

ファイル名の拡張子を .cpp にしていませんか。
int main(int argc, char **argv)
{
    static char **a = argv;


C では、静的変数はプログラムの実行開始時(main が呼び出される前)に
初期化されるので、定数式が要求されます。

C++ では、静的変数は、その宣言を最初に通るときに一回だけ初期化されます
から、変数や関数での初期化が可能です。

No.4234

Re:staticの引数での初期化
投稿者---Zzz...(2003/01/07 21:07:41)


>C では、静的変数はプログラムの実行開始時(main が呼び出される前)に
>初期化されるので、定数式が要求されます。
>C++ では、静的変数は、その宣言を最初に通るときに一回だけ初期化されます
>から、変数や関数での初期化が可能です。

あ、本当だ...
失礼しました

No.4245

Re:staticの引数での初期化
投稿者---mtk(2003/01/08 11:31:51)


>C では、静的変数はプログラムの実行開始時(main が呼び出される前)に
>初期化されるので、定数式が要求されます。

なるほど、静的変数の初期化は定数式ですか。

Zzz...さん、かずまさん、ありがとうございました。