none
communityにおいて、"型 *変数名[]"の定義がコンパイルエラーになる事について。

    質問

  • 皆様、お世話になります。

    実は、Visual Studio Communityを使用しているのですが、C言語においての基本的なコーディングで行き詰まってしまい、お力をお借りしたいと思っております。

    その内容とは、仮に、

           char *str1[];

    と言うコーディングの部分で、コンパイルエラーが出ます。

    次に、

           char *str2[6] ={ "abc","def","ghi" };

    と、すると、2つめの初期化の"def"の定義において、エラーが出ます。

    しかし、main関数の引数指定のargvにおいては、"char *argv[]"が、通ってしまいます。

    何がおかしいのか、こちらは打つ手なしです。

    includeは、stdio.hのみです。プロジェクトはコンソール用のものです。ファイルの種類は、.cppですが、記述レベルは、.cのものです。

    Versionは、Visual Studio Community 2017 です。

    なにとぞ、お力添えの程を、宜しくお願いいたします。

    2018年11月4日 2:07

すべての返信

  • char *str1[];

    というコードは、配列の要素数が省略されていますが、配列の要素数を省略する場合は必ず、要素数を明確にするため右辺が必要となります。
    参考サイト: https://builder.japan.zdnet.com/script/sp_c-programming-language/20370163/

    次に、

    char *str2[6] ={ "abc","def","ghi" };

    というコードですが、

    最近の Visual Studio の C++ コンパイラは、「文字列リテラルを使用して初期化されたポインターに対して const 修飾による標準への厳密な準拠を要求します。」とのことらしいです。(Visual C++ 2010 で試したところ上記のコードはエラーとはなりませんでした。)

    上記のコードでは、右辺が const の文字列リテラルに対して、左辺は const ではないため、コンパイルエラーとなります。下記のコードように左辺の先頭に const を追加するか、コンパイルオプションに「/Zc:strictStrings-」 をつけることでエラーはなくなると思います。

    const char *str2[6] ={ "abc","def","ghi" };

    参考サイト: https://msdn.microsoft.com/ja-jp/library/dn449508(v=vs.140).aspx

    *質問は 1 つの投稿で 1 つに絞った方が閲覧者が見やすいかもしれません。
    2018年11月4日 2:47
  • 最近の Visual Studio の C++ コンパイラは、「文字列リテラルを使用して初期化されたポインターに対して const 修飾による標準への厳密な準拠を要求します。」とのことらしいです。(Visual C++ 2010 で試したところ上記のコードはエラーとはなりませんでした。)
    コンパイラ(cl.exe)の挙動としては変更ありません。ただし、Visual Studio 2017 15.5以降の環境で新規プロジェクトを作成した際のプロジェクトのデフォルト値として/permissive-が設定されるように変更されています。/permissive-が設定されると連動して/Zc:strictStringsが設定され、kenjinoteさんの説明されたような動作となります。
    2018年11月4日 5:58
  • 皆様、ありがとうございます。

    お答えを基本にして、もう少し自分で調べてみようと思います。

    非常に参考になりました。

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

    2018年11月14日 3:00
  • ぷにすけさん、こんにちは。フォーラム オペレーターの立花です。
    MSDN フォーラムへご投稿くださいましてありがとうございます。

    フォーラム オペレーターから 1 点お願いをさせてください。

    参考となる返信 (情報) をいただいたら、その投稿に対して
    [回答としてマーク] をご設定ください。

    同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。


    参考になった投稿には回答としてマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    2018年11月14日 4:05
    モデレータ