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

CとC++の両方でコンパイルできるのに結果が異なるプログラムの作り方

CでもC++でもコンパイル・実行できるにもかかわらず、実行結果が異なるプログラムを作る方法を紹介します。

言語仕様の微妙な違いにより、まったく同じソースコードでもCとC++で異なる動作をするケースがいくつか存在します。ここでは、その代表例を2つ取り上げて解説します。

1. 文字リテラルの扱いの違い

CとC++では、文字リテラルに対する扱いが異なります。Cでは文字リテラルは整数型(int)として解釈されますが、C++ではchar型として扱われます。この違いを利用すると、sizeof演算子の結果に差が生まれます。

サンプルコード

#include<stdio.h>
int main(){
    printf("%d", sizeof('a'));
    return 0;
}

実行結果

C : 4
C++: 1

Cでは 'a' はint型(多くの環境で4バイト)として扱われるためsizeofの結果は4になりますが、C++ではchar型(1バイト)として扱われるため1となります。

2. 比較結果(ブール値)の扱いの違い

等号や不等号を使った比較式の結果も、CとC++で型が異なります。Cでは比較結果はint型として扱われますが、C++ではbool型として扱われます。

サンプルコード

#include<stdio.h>
int main(){
    printf("%d", sizeof(1!=1));
    return 0;
}

実行結果

C : 4
C++: 1

「1!=1」という比較式は、Cではint型(4バイト)、C++ではbool型(1バイト)として評価されるため、sizeofの戻り値に違いが現れます。

まとめ

このように、文字リテラルやブール値といった暗黙的な型の扱いの違いを利用すれば、同一のコードでありながらCとC++で異なる結果を得るプログラムを作成できます。CとC++は高い互換性を持つ一方で、こうした細かな仕様の差異が存在します。その違いを正しく理解しておくことは、移植性の高いコードを書くうえで非常に役立ちます。

  1. C++でHello Worldプログラムを作成・実行する方法を初心者向けに解説

    Hello Worldプログラムを実行するには、以下の手順に沿って進めていきましょう。 C++プログラムを書く コンパイラのインストールが完了したら、次はいよいよC++プログラムを書いてみましょう。まずはプログラミング学習の定番である「Hello World」プログラムから始めます。この例では、C++を使って画面に「Hello World」と表示させます。hello.cppという名前で新しいファイルを作成し、以下のコードを記述してください。 #include<iostream> int main() {     std::cout <&

  2. C#でGCD(最大公約数)とLCM(最小公倍数)を求めるプログラムの作成方法

    GCD(最大公約数)とは? GCD(Greatest Common Divisor:最大公約数)とは、複数の整数をすべて余りなく割り切ることができる正の整数のうち、最も大きなものを指します。たとえば、10と16の最大公約数は「2」です。 LCM(最小公倍数)とは? LCM(Least Common Multiple:最小公倍数)とは、2つの整数のどちらによっても割り切れる整数のうち、最も小さいものを指します。たとえば、10と16の最小公倍数は「80」です。 GCDとLCMの間には、次のような重要な関係が成り立ちます。 LCM × GCD = 2つの数の積 この性質を利用すると、まずユークリッ