◀Unicode版開発トップへ
  • 2306 CアウトラインでK&R関数定義がおかしい
    • 2307 Re:CアウトラインでK&R関数定義がおかしい
      • 2308 Re2:CアウトラインでK&R関数定義がおかしい
        • 2312 Re3:CアウトラインでK&R関数定義がおかしい
          • 2313 Re4:CアウトラインでK&R関数定義がおかしい
  • [2306] CアウトラインでK&R関数定義がおかしい もか 2015年10月24日 19:42

    K&Rの
    int func(arg,length)
    char* arg;
    int length;
    {
    int i;
    func2();
    i = test(arg, length);
    return (i);
    }
    みたいな記述でいつからかはわからないのですがfunc2, returnが関数宣言扱いになってます。
    • [2307] Re:CアウトラインでK&R関数定義がおかしい novice 2015年10月24日 21:28

      ▼ もかさん
      > K&Rの
      > みたいな記述でいつからかはわからないのですがfunc2, returnが関数宣言扱いになってます。

      調べてみたら、
      r2995 o
      r2996 x
      でした。

      https://sourceforge.net/p/sakura-editor/code/2996/

      • [2308] Re2:CアウトラインでK&R関数定義がおかしい もか 2015年10月24日 21:45

        C++の関数宣言の後ろに何かくっついてる状態と、
        K&Rの関数定義は、マクロまで考えると両方同時にサポートするのは
        かなり厳しそうです。
        class,publicなどのキーワードやstruct内関数,::の使用や、
        ファイル拡張子などでC++かC(K&R)かを識別して処理を分ける方法ぐらいしか思いつきません。
        他にはK&Rの場合は、引数リストのところが変数名のみになっていて、
        それ以外では型と変数名の2つ以上のキーワードからできてるはずなので
        それで識別可能かもしれません。
        void func_k_and_r
        (arg1, arg2)←これが変数名のみである
        int arg1;

        void func_cpp
        (int arg1, int arg2)←これが必ず型名を含む(2つ以上の単語でできてる)
        _THROW2((hoge, fuga));
        とりあえず私はすぐに対応するのは無理そうです。
        • [2312] Re3:CアウトラインでK&R関数定義がおかしい もか 2015年11月14日 01:27

          拡張子が.cの時のC言語モードのときK&R定義を読めるようにしたパッチを登録しました。
          patchunicode:1012
          • [2313] Re4:CアウトラインでK&R関数定義がおかしい novice 2015年11月17日 00:39

            ▼ もかさん
            > 拡張子が.cの時のC言語モードのときK&R定義を読めるようにしたパッチを登録しました。
            > patchunicode:1012

            サンプルコードを貼り付けて、
            Eclipse CDTの動作を見てみましたが、
            拡張子がcのときは問題なし、
            拡張子がcppのときはsyntax errorが表示されます。
            ということで、今回のパッチのように
            自動判定&手動設定もできれば問題ないと思います。