C++
 Computer >> コンピューター >  >> プログラミング >> C++

GCCコンパイラとG++コンパイラの違いを徹底解説

GCCとG++の基本的な違い

C/C++の開発環境では、gccg++という2つのコンパイラを使い分ける場面があります。どちらもGNUプロジェクトが提供するコンパイラですが、動作には重要な違いがあります。

まず基本として、gccは「GNU Cコンパイラ」、g++は「GNU C++コンパイラ」と呼ばれています。それぞれの主な違いは以下の通りです。

  • gccは、*.cファイルをC言語として、*.cppファイルをC++言語として、それぞれ適切にコンパイルできる
  • g++も*.cファイルと*.cppファイルの両方をコンパイルできるが、どちらもC++ファイルとして扱う
  • g++でオブジェクトファイルをリンクすると、標準C++ライブラリ(STLなど)が自動的にリンクされる。一方、gccでは自動的にリンクされない
  • gccがCファイルをコンパイルする際に定義される事前定義マクロは比較的少ない
  • C++ファイルをコンパイルする場合、gccでもより多くの事前定義マクロが定義され、g++でも同様に多数のマクロが定義される

C++ファイル用の追加マクロ

C++ファイルをコンパイルする際に追加で定義される代表的なマクロは以下の通りです。

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

使い分けのポイント

この違いを実務上どう活かすかというと、次のように考えると分かりやすいでしょう。

  • 純粋なC言語のプロジェクトなら、gccを使用するのが適切です。余計なC++ライブラリがリンクされず、バイナリも軽量になります。
  • C++のプロジェクトでは、g++を使用するのが推奨されます。標準C++ライブラリへのリンクが自動で行われるため、std::vectorやiostreamなどの機能を問題なく利用できます。

特に注意したいのは、C++のコードをgccでコンパイル・リンクした場合、「undefined reference to ...」といった未定義参照エラーが発生しやすい点です。これはgccが標準C++ライブラリを自動的にリンクしないためです。エラーが出た場合はg++でのビルドを試すと解決することが多いでしょう。

  1. Androidのgravityとlayout_gravityの違いとは?使い分けを実例付きで解説

    Androidには、ビューの配置を調整するための属性として「gravity」と「layout_gravity」の2種類が用意されています。名前が似ているため混同されやすいのですが、それぞれ役割が異なります。 gravityとlayout_gravityの基本的な違い android:gravity … ビュー内部のコンテンツ(テキストなど)をビュー内のどの位置に表示するかを指定する属性です。 android:layout_gravity … ビューそのものを親レイアウト内のどの位置に配置するかを指定する属性です。 まずはgravityの使用例を見てみましょう。 <TextView &

  2. 【Android入門】onCreate()とonStart()の違いをサンプルコードで解説

    onCreate()とonStart()の違いとは? この記事では、Androidアプリ開発におけるonCreate()とonStart()の違いを、実際に動くサンプルコードを使ってわかりやすく解説します。 まず、それぞれのメソッドの役割をおさらいしておきましょう。 onCreate():アクティビティが最初に生成されたときに呼び出される onStart():アクティビティがユーザーの目に見える状態になる直前に呼び出される ポイントは、onCreate()はアクティビティのライフサイクルの中で基本的に一度だけ呼ばれるのに対し、onStart()はホームボタンでバックグラウンドに移動した後に