0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

c++始めてみた:Mac-Air(2013)にXcodeで環境構築をしてみた個人ノート1.5

Last updated at Posted at 2019-08-14

MacbookAir(2013)でc++の環境構築をしてみた

そういえば、古い Macbook Air (2013) 13 inch を普段使い用に使っていて
ここにいる皆さんとは比べ物にならない低いマシンパワーじゃないかなとふと思いました。
ノートゲーミングPC(Ubuntu)もあるにはあるんですが、起動している時間が2−4時間とか普段使いには使い難いんですよね。基本大量の計算とかGPUがいる処理用にしか使ってません。(移動民族なのでノートしか選択肢がありません)
そろそろ替え時だとは思ってはいるんですが、最新型のタッチバーとかよく分からんです。サーフェイスも性能の割には高いし、DELLにしようか、凄く悩みます。薄い軽いノートを買ってUbuntu2台持ち?は何となく不安(2019年8月現在)

環境

Macbook Air 13 Mid 2013
macOS Mojave Version 10.14.6
Xcode 10.3をダウンロード

参考資料

Youtube video: "How to Setup C++ on Mac"

上のYoutube Videoに沿って、xcodeをダウンロードして設定とかを決めて
実際にコードを実行してみたところ、

hello.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "Hello World" << endl;
}

'bits/stdc++.h' file not found

いきなりエラーが出ました。

そこでググると「stackoverflow 」で問題点を解説していて、「stdc++.h」が必要との事なのでそのファイルをダウンロードして自分の好きなフォルダに保存
そしてまた実行してみる

hello2.cpp
#include "/<自分の好きなフォルダ場所>/stdc++.h"
using namespace std;

int main() {
    cout << "Hello World" << endl;
}

するとビルド?が成功し、Hello World も無事アウトプットする事が出来ました。
ですがc++14を使いたいのに、右側のサイドバーにはDefault - C++ Sourceという基準になっていて
上の二つの基準がどう違うのか良く分かりません。

追記

ググっていると

C++ Newbie Tour: Getting Started With C++ On Mac OSX

という記事を見つけて
c++のバージョンを調べてくれるコードを見つけたので実行してみると

version.cpp
#include <iostream>
int main(){
  #if __cplusplus == 201402L
    std::cout << "C++14" << std::endl;
  #elif __cplusplus==201103L
    std::cout << "C++11" << std::endl;
  #else
    std::cout << "C++" << std::endl;
  #endif
  return 0;
}

c++14と出たのでc++14なんですかね?

Xcode内を調べてみると

Build SettingsApple Clang - Language - C++C++ Language Dialect
GNU++14 [-std=gnu++14] を採用していたらしく、これのお陰でc++14基準になっているんだろうか?と予測を立ててみました。

他にも沢山候補があったので

GNU++14 [-std=gnu++14]の部分を

c++11 [-std=c++11]GNU++11 [-std=gnu++11]に変えると

上のコードの結果がc++11になったので
多分そうなんだろうと思いました。合ってますかね?

GNU++17 [-std=gnu++17]c++17 [-std=c++17]の候補もあったので
これもテストしてみます

What is the value of __cplusplus for C++17?

上の記事によると、c++17のcplusplusの値は 201703L らしいので

version2.cpp
#include <iostream>
int main(){
  #if __cplusplus == 201703L
    std::cout << "C++17" << std::endl;
  #elif __cplusplus == 201402L
    std::cout << "C++14" << std::endl;
  #elif __cplusplus==201103L
    std::cout << "C++11" << std::endl;
  #else
    std::cout << "C++" << std::endl;
  #endif
  return 0;
}

というコードを新たに試してみました。

予想通りに、候補を変える度に
結果がc++11, c++14, c++17と変わっていきました。

あと、AtCoderでは
Program ended with exit code: 0
という値が出てこないのですが、ここでは(Xcode上では)毎回最後に出てきます。
何でだろうと思い、ググってみると

The message doesn't come from your program itself, but from the IDE (e.g. Visual Studio) that launches the program. Try launching it from the command-line or by double-clicking the .exe file.

あれ?IDEを使っていると出てくるらしいんですが、command-line-toolをXcode内で選んでいたと思ったんですけど、よく分かりません。

ただ、エラーが無いという事を教えてくれているだけなので、別に大した事では無いですね。

あと、GNU++c++の違いは???

What are the differences between -std=c++11 and -std=gnu++11?

上の記事によると

The difference between the two options is whether GNU extensions that violates/extend the C++ standard are enabled or not.

二つの違いは
標準c++を拡張する/違反するGNU拡張が使えるかどうか・・・
意味がよく分かりませんがGNU用かそうでないかという事なんですかね?
なので基本c++14を使う予定です。

これで初心者用のコンパイラの構築は出来たかな?と思います

まだ気になっている事

  • gcc?
  • g++?
  • IDE?
  • CMake?
  • Clang?
  • Clion?
  • などなど

https://solarianprogrammer.com/2017/05/21/compiling-gcc-macos/
https://kig.re/2018/09/20/c++-newbie-tour-how-to-get-started-with-c++-on-mac-osx.html

追記
下のコードでもstdc++.hが使えるようになりました。
<>とか””とかの機能はどう違うんですかね?

hello3.cpp
#include </"自分の好きなフォルダ場所"/stdc++.h>
using namespace std;

int main() {
    cout << "Hello World" << endl;
}
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?