LoginSignup
1

More than 5 years have passed since last update.

Xcodeでなんか知らんけど原因不明なエラーが大量に出る

Last updated at Posted at 2019-02-08

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入力するはずのない0x13が見える...?
Asciiコード表で確認してみると

| 0x13 | DC3(装置制御3) |

...なんで?

原因

  • 原因はXcodeでミスってc-x sを押しまくってしまうこと

Xcode ascii 0x13とかでググってみても情報が無い、
けどふと思った、いつもEmacs使っているのでよく間違って C-x sをやっている...
-> 入力するとそこに0x13が挿入されることを確認
-> なんか知らんけどXcodeはc-xをすると0x13が挿入されてしまう模様

解決策

Preference -> KeyBindingsを見てみると
スクリーンショット 2019-02-08 20.49.25.png
こんなのを発見、おそらくXcodeでのMark Yankをするために内部的に0x13を入れているのだと思われる(要出典)
どうせこれは使わないので無効化して、今ある0x13を消すと同様の問題は発生しなくなった

Xcodeでも完璧にEmacsのキーバインディングが使いたい....

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1