その1

Table of Contents

やること

  1. とりあえずコンパイルしてみる
  2. 文字を画面に出力する
  3. 整数の足し算をする
  4. コメントアウトしてみる

解説

とりあえずコンパイルしてみる

とりあえずコンパイルをしてみましょう。 テキストファイルを作成し,以下のように入力しましょう。

int main(){
    return 0;
}

テキストファイルを作るにはいろいろな方法がありますが,例えば

touch file.cc
emacs file.cc
nano file.cc

があります。 一番上の “touch” コマンドはからのファイルを作成するだけのコマンドです。 作成したあとに編集しましょう。 “emacs”, “nano” はファイルエディタのことです。 存在しない名前のファイルを指定すると,そのファイルを作成し,編集する状態になります。

ファイルを作成し,上記の内容を書き込んだら以下のコマンドを実行しましょう。

g++ ${name}

ここで “${name}” はファイル名に置き換えてください。 例えば

g++ hello.cc

のようになります。

ファイル末尾には “.” ではじまる拡張子をつけ,ファイルの種類をファイル名から推測できるようにするのが一般的です。 C 言語の(ソースファイルの)場合 “.c”,C++ の場合は “.cc”, “.cpp”, “.cxx”, “.c++”, “.cc” がよく使われるようです。

コンパイル時にエラーがなければ特に何も表示されませんが,エラーがあるときは,例えば

mail:cpp genki$ g++ test.cc
test.cc: In function ‘int main()’:
test.cc:3: error: expected ‘;’ before ‘}’ token

のようにメッセージが表示されます。 このメッセージは “;” を打ち忘れているという意味です。

コンパイルに成功すると,a.out という実行ファイルが生成されます。 このファイルを実行するには

./a.out

とうちます。 サンプルプログラムは「なにもしない」というものなので,実行したときに何も起こらないのが正常な動作です。[1]

文字を画面に出力する

文字や数字を画面に出力するのは,プログラミングを始めるときにやる 基本的なことです。 方法はいくつかありますが

cout << "Hello world";

をやってみましょう。

“cout” は出力ストリームオブジェクトというもので,演算子 “<<” を介して渡された文字列を出力します。 “” でくくられた範囲が文字列になります。 “” をつけないとエラーになるでしょう。 “;” は行の終わりを意味します。

とりあえずコンパイルしてみる のサンプルコードを改造し

#include <iostream>
using namespace std;

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

のようにしてコンパイル,実行しましょう[2]。 前の例に “<< endl” が追加されています。 “endl” は改行の意味です。

mail:cpp genki$ g++ test.cc
mail:cpp genki$ ./a.out
Hello world

となると思います。

ダブルクォーテーションで囲まれた部分に好きな文字列を入れることができます。 また,

cout << "Silly sheep weep and sleep.\n";
     << "She sells seashells by the seashore\n"

の様にも書けたりします。 細かいことは調べてみましょう。

以下の課題をやってみましょう。

課題1: \n の意味

課題2: cout 以外の方法

整数の足し算をする

整数,小数の加減乗除は大事です。

C/C++ ではいろいろな型 (type) と呼ばれる変数の属性があります。 とりあえず,以下のものを知っておくといいでしょう

int
整数型
double
倍精度浮動小数点型
char
文字型
string
文字列型
bool
論理型。 偽(通常は0)と真(0 以外の値)を表すのに使う。

上記のような型を指定して変数を宣言するには

int val;

のようにします。 val という名前の int 型変数に値を代入するには = 演算子を使って,

val = 1;

のようにします,

宣言と値の代入を一度にすることもできます。

int value1 = 1;

整数や小数の加減乗除はそれぞれ +, -, *, / 演算子を使います。

int value2 = 2 + 4;

int value3 = 7 * 3;

double value4 = 9 * 8 / 7;

コメントアウトしてみる

コンパイル時に「コメント」は無視されます。 コメントはプログラムの説明などを記述するときに使われますが,プログラムもコメントにしてコンパイルしない,ということもできます。 これをコメントアウトといいます。

コメントは

// it's a comment
int num; // the comment starts after "//"

のように,“//” よりあとから行の終わりまでがコメントになります。

また “/“ と ”/” でくくった箇所もコメントになるので

 /* comment */

 /* something wrong
 inta number;
 */

も出来ます。

サンプル

サンプルファイル をコンパイル,実行すると

mail:src genki$ g++ cpp_test1.cc
mail:src genki$ ./a.out
Hello world
value1: 1
value2: 2
value1 + value2 = 3

のようになるはずです。 確認してみましょう。

課題

課題1

サンプルには

\n

が文末にありますが,この意味は何でしょうか? 「メタ文字」や「エスケープシーケンス」で検索し,調べてみましょう。

課題2

cout 以外にも文字を出力する方法があります。 printf を調べて,使ってみましょう。


  1. もしかしたら a.out 実行時に

       mail:cpp genki$ ./a.out
       -bash: ./a.out: Permission denied
    

    と表示されるかもしれません。 これは「自分にファイルの実行権限がない」という意味です。 ls コマンドでファイルの様子を見てみましょう。

     mail:cpp genki$ ls -l a.out
     -rw-r–r– 1 genki genki 8648 6 13 19:24 a.out
    
    -rw-r–r– がファイルの状態を表しています。 具体的には “- rw- r– r–” のように分割することができ,1つ目はファイル属性,2つ目はファイル所有者の権限,3つ目はグループの権限,4つ目はその他のユーザーの権限を意味しています。 詳しくは“応用力”をつけるためのLinux再入門(9):「ls -l」コマンドの表示からファイルの属性を理解しよう (1/4) を読んでください。  ↩

  2. #include <iostream>
    は iostream というヘッダーファイルを取り込むという意味です。iostream には文字の入出力に関わるいろいろな機能が書かれています。
    using namespace std;
    はstd という名前空間を使うという意味ですが,理解するのは後回しにしても大丈夫です。  ↩