1. ホーム
  2. c++

[解決済み] C言語とC++の両方で有効なコードを、それぞれの言語でコンパイルすると、異なる動作になることがありますか?

2022-03-14 20:11:30

質問

CとC++には多くの違いがあり、有効なCのコードがすべて有効なC++のコードであるとは限りません。
("valid"とは、定義された動作をする標準的なコード、つまり実装に依存しない/未定義ではない/などの意味です).

CとC++の両方で有効なコード片が、以下のようなシナリオはありますか? 異なる それぞれの言語の標準的なコンパイラーでコンパイルした場合の動作について教えてください。

合理的/有用な比較にするために(私は実用的に役立つことを学びたいのであって、質問の明らかな抜け穴を見つけようとしているのではありません)、仮定してみましょう。

  • プリプロセッサ関連は一切なし(つまり #ifdef __cplusplus プラグマなど)
  • 実装で定義されたものは両言語で同じ(数値制限など)
  • 各標準の合理的に最近のバージョンを比較している(例えば、C++98とC90またはそれ以降とする)。
    もしバージョンが重要であれば、それぞれのどのバージョンで異なる動作が発生するのかを記載してください。

解決方法は?

CとC++で有効な次のコードは、(ほとんどの場合)異なる値が i をCとC++の両方で使用することができます。

int i = sizeof('a');

参照 C/C++における文字('a')の大きさ は、その違いを説明しています。

からもう一つ。 この記事 :

#include <stdio.h>

int  sz = 80;

int main(void)
{
    struct sz { char c; };

    int val = sizeof(sz);      // sizeof(int) in C,
                               // sizeof(struct sz) in C++
    printf("%d\n", val);
    return 0;
}