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

コードはCとC++の両方で有効ですが、異なる出力を生成します


ここでは、CまたはC++コンパイラでコンパイルされた場合に異なる結果を返すプログラムをいくつか紹介します。そのようなプログラムはたくさんありますが、ここではそれらのいくつかについて説明しています。

  • CおよびC++では、文字リテラルは異なる方法で扱われます。 Cではintとして扱われますが、C++では文字として扱われます。したがって、sizeof()演算子を使用してサイズを確認すると、Cでは4、C++では1が返されます。

#include<stdio.h>
int main() {
   printf("The character: %c, size(%d)", 'a', sizeof('a'));
}

出力

The character: a, size(4)

#include<iostream.h>
int main() {
   printf("The character: %c, size(%d)", 'a', sizeof('a'));
}

出力(C ++)

The character: a, size(1)

Cでstructを使用する場合、typedefが使用されるまで、structタグを使用するときにstructタグを使用する必要があります。ただし、C ++では、構造体を使用するためにタグを構造化する必要はありません。

#include<stdio.h>
struct MyStruct{
   int x;
   char y;
};
int main() {
   struct MyStruct st; //struct tag is present
   st.x = 10;
   st.y = 'd';
   printf("Struct (%d|%c)", st.x, st.y);
}

出力(C)

Struct (10|d)

#include<iostream>
struct MyStruct{
   int x;
   char y;
};
int main() {
   MyStruct st; //struct tag is not present
   st.x = 10;
   st.y = 'd';
   printf("Struct (%d|%c)", st.x, st.y);
}

出力(C ++)

Struct (10|d)

ブール型データのサイズは、CとC++で異なります。

#include<stdio.h>
   int main() {
   printf("Bool size: %d", sizeof(1 == 1));
}

出力(C)

Bool size: 4

#include<iostream>
   int main() {
   printf("Bool size: %d", sizeof(1 == 1));
}

出力(C ++)

Bool size: 1

  1. C++の「struct」と「typedefstruct」の違いは?

    C ++では、structとtypedef structの間に違いはありません。これは、C ++では、すべてのstruct / union / enum/class宣言が暗黙的にtypedefであるかのように動作するためです。 ed、同じ名前の別の宣言によって名前が隠されていない限り。 typedefを前方宣言できないという微妙な違いが1つありますが、したがって、typedefオプションの場合、どこでも使用する前に、typedefを含むファイルを含める必要があります。

  2. C ++変数はconstとvolatileの両方にすることができますか?

    はい、C++変数はconstとvolatileの両方である必要があります。これは、読み取り専用のハードウェアレジスタ、または別のスレッドの出力などの状況で使用されます。 Volatileは、現在のスレッドの外部の何かによって変更される可能性があることを意味し、Constは、(const宣言を使用しているプログラムで)書き込みを行わないことを意味します。