Xcode로 뭔지 모르지만 원인 불명한 오류가 대량으로 나온다

Xcode로 인해 알 수없는 Expected ~~~ 오류가 발생합니다.



이것을 읽고 해결할 수 있는 사람


  • 의미 없는 오류가 나오고 빌드가 통과하지 않는 사람
  • 그중에 Emacs나 그 키 바인딩을 언제나 사용하고 있는 사람
  • 게다가 Xcode를 사용하는 사람

  • 환경



    macOS: 1.14.2
    Xcode : 10.1 (이 문제 자체는 이전부터 있었던 모양)

    TL;DR


  • Xcode + C++ + Siv3D에서 게임을 디자인하는 동안 수수께끼 오류
  • 수수께끼 오류가 아니라 오류 메시지는 간단하지만 나오는 원인을 모르겠습니다
  • 나오는 녀석
  • Expected member name or ';' after declaration specifiers
  • Expected unqualified-id
  • Expected Expression


  • 어떤 곳에서 나왔는지



    Looper.hpp
    class Looper final {
    public:
        Looper();
        bool loop() const;        //Expected Expression
    };
    

    Looper.cpp
    // 前略
    bool Looper::loop() const {
        return true;              //Expected Expression
    }
    

    SystemMain.hpp
    class SystemMain final {
    public:
        SystemMain() = default;;
    
        bool init();
        bool main();
        bool exit();
    };
                                  //この行でExpected unqualified-id
    

    Define.cpp
    class Define final {
    public:
        const static int WINDOW_W;
        const static int WINDOW_H;
    
        const static double PI;   //Expected member name or ';' after declaration specifiers
    };
    

    고찰


  • 문법적으로 정확하게 보이는 곳에서도 발생하고 있습니다
  • 공행조차 발생하고 있다
  • 문법적 문제가 아닌가?
  • 전각 스페이스가 아닌 것을 확인했다
    -> 전각 공간 이외의 보이지 않는 문자
    -> 제어 문자?


  • 검증



    문제의 부분을 바이너리 에디터로 봐

    Define.hpp
    00000100  20 20 20 20 0a 20 20 20  20 63 6f 6e 73 74 20 73  |    .    const s|
    00000110  74 61 74 69 63 20 64 6f  75 62 6c 65 20 13 50 49  |tatic double .PI|
    00000120  3b 0a 7d 3b 0a 0a 0a 23  65 6e 64 69 66 20 2f 2a  |;.};...#endif /*|
    

    SystemMain.hpp
    00000120  65 78 69 74 28 29 3b 0a  7d 3b 0a 13 0a 23 65 6e  |exit();.};...#en|
    

    뭔가 Define.hpp의 0x11D 그리고 SystemMain.hpp의 0x12B 입력하지 않아 0x13Ascii 코드 표에서 확인해 보면

    | 0x13 | DC3(장치 제어 3) |

    ...왜?

    원인


  • 원인은 Xcode에서 실수하고 c-x s를 밀어 버리는 것
  • Xcode ascii 0x13 어쨌든 구구 해봐도 정보가 없다,
    하지만 문득 생각했는데, 언제나 Emacs를 사용하기 때문에 잘못 C-x s를하고 있습니다 ...
    -> 입력하면 거기에 0x13이 삽입되는지 확인
    -> 뭔가 모르지만 Xcode는 c-x를하면 0x13이 삽입되어 버리는 모양

    해결책



    Preference -> KeyBindings를 살펴보면

    이런 것을 발견, 아마 Xcode에서 Mark Yank를 하기 위해 내부적으로 0x13을 넣고 있다고 생각된다(요출전)
    어차피 이것은 사용하지 않기 때문에 무효화하고, 지금 있는 0x13을 지우는 것과 같은 문제는 발생하지 않게 되었다

    Xcode에서도 완벽하게 Emacs의 키 바인딩을 사용하고 싶습니다 ....

    좋은 웹페이지 즐겨찾기