質問: ### 発生している問題・エラーメッセージ C++でquick_exit()が使えません。 ヘッダファイルをincludeしているのですが、 g++でコンパイルすると ``` error: use of undeclared identifier 'quick_exit' quick_exit(0); ^ 1 error generated. ``` こちらのエラーが消えずに困っています。 おそらくヘッダファイルをちゃんと記入していれば変数名が宣言されていないとのエラーは出ないと思うのですがどうでしょうか? どのサイトを調べても同じようなエラーが出ている人が見つからず困っております。 もしかするとclangの影響なのかな・・と思っていたのですがいかがでしょうか。 ご回答おまちしております。 ### 補足情報(言語/FW/ツール等のバージョンなど) macOS Sierra
回答: 現象を確認しました。HomebrewでいれたGCCでも(Xcodeではないほうの)LLVMでも駄目なようです。 ヘッダファイルレベルで確認すると、cstdlibが最終的に読み込むシステムのヘッダ(/usr/include/stdlib.h)に`quick_exit`がないため、Macでは使えないようです。FreeBSDやLinuxでは同じClangを使ってもヘッダファイルでは有効になるようなので、たぶん使えるでしょう。 つまり、システムのライブラリレベルでquick_exitが用意されていないから、システムのヘッダファイルにも用意されていない事が原因のようです。Macのいわゆるlibc(Cライブラリ)はglibcではなく/usr/lib/libSystem.B.dylibという独自のものを使っています。glibcのようにC11/C++11を満たす全ての標準ライブラリが含まれているわけではありません(glibcでもC11のthreadsはありませんが)。`-std=c++11`をつけようが、コンパイラを変えようが、そもそもOSとして、そのような動作をする仕組みが用意されていないということが原因のため、Macで使う手段は無いと思います。