C言語との差異 解答ページ | Programming Place Plus C++編【言語解説】 第2章

トップページC++編

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① 次のプログラムは、文字と整数のどちらを出力しますか?

#include <iostream>

int main()
{
    std::cout << 'A' << std::endl;
}


このプログラムは、文字の A を出力します。

C++ では、‘A’ のような文字リテラルは char型です。std::cout を使って出力を行う場合、渡した値の型を判断して適切な形式を選んでくれます。char型を渡せば、素直に文字が出力されます。

問題②

問題② 次のプログラムを、C言語(C95) でも C++(C++03) でもコンパイルでき、同じ実行結果になるように書き換えてください。

#include <iostream>

enum Color {
    RED,
    GREEN,
    BLUE
};

int main()
{
    Color color = 0;

    color += 1;

    std::cout << color << std::endl;
}

まず、C言語では <iostream> はありませんから、<stdio.h> に置き換えます。

#include <stdio.h>

そして、std::cout での出力を、printf関数に変更します。

printf("%d\n", color);

C言語では、仮引数を省略することと、void を明示することの意味合いが異なりますから、main関数の引数には、明示的な void を追加します。

int main(void)

C言語では、列挙型の変数を宣言する際、「enum」キーワードを省略できませんから、明示的に書くようにします。

また、初期値として int型の 0 を渡すことは、C++ ではキャストを必要としますからキャストも追加します。このキャストの際に指定する型もまた、enumキーワードを明示的に書かないといけません。

enum Color color = (enum Color)0;

C++ では、enum型変数に int型を加算できません。+=演算子を使っているとキャストもできないので、分解した上でキャストを追加します。

color = (enum Color)(color + 1);

これで完了です。全体像を再掲します。

#include <stdio.h>

enum Color {
    RED,
    GREEN,
    BLUE
};

int main(void)
{
    enum Color color = (enum Color)0;

    color = (enum Color)(color + 1);

    printf("%d\n", (int)color);
}

実行結果:

1


参考リンク


更新履歴

’2018/7/10 全体的に見直し修正。

’2017/7/4 問題②の解答で、列挙定数の末尾のコンマの可否についての記述が逆になっていたのを修正。
特にコードの書き換えは必要ないので、これに関する記述自体を削除した。

’2013/2/23 新規作成。



第2章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る