2012-05-07 20 views
-3

C++を学ぶプロのC#プログラマーとして、データ型をC#と同じにしたいと思います。私はこれを助けるヘッダファイルを書いた。私が知りたいのは、それが正しいかどうかです。C++データ型とC#データ型

// boolean 
//#DEFINE bool char 
//#DEFINE true 0x01 
//#DEFINE false 0x00 

// 8-bit integers 
#DEFINE byte unsigned char 
#DEFINE UInt8 unsigned char 
#DEFINE Byte unsigned char 
#DEFINE sbyte char 
#DEFINE Int8 char 
#DEFINE SByte char 

// 16-bit integers 
#DEFINE ushort unsigned short int 
#DEFINE UInt16 unsigned short int 
#DEFINE short short int 
#DEFINE Int16 short int 

// 32-bit integers 
#DEFINE uint unsigned int 
#DEFINE UInt32 unsigned int 
//#DEFINE int int 
#DEFINE Int32 int 

// 64-bit integers 
#DEFINE long long long 
#DEFINE Int64 long long 
#DEFINE ulong unsigned long long 
#DEFINE UInt64 unsigned long long 

// 32-bit floating point 
//#DEFINE float float 
#DEFINE Single float 

// 64-bit floating point 
//#DEFINE double double 
#DEFINE Double double 
+7

使用のtypedefで発生します。私はダブルが64ビットであると保証されているとは思わない(GCCは96を使うと思う)。 – chris

+17

他の開発者がこのコードで作業する可能性がある場合は、標準のC++タイプを学ぶ時間を投資することを検討してください。 – TheEvilPenguin

+1

固定幅タイプが必要な場合は、[cstdint](http://en.cppreference.com/w/cpp/types/integer)(または[boost](http://www.boost.org) /doc/libs/release/libs/integer/doc/html/boost_integer/cstdint.html)非C++ 11コンパイラ/ライブラリ用の実装)。 – Mankarse

答えて

6

恐ろしいスタイルとは別に、これらのマクロは期待通りに動作しません。

#define long long long 

は、あらゆる種類の問題を起こしやすい。完全にどちらかの問題が解決しないマクロ定義の順序を逆に

http://ideone.com/Jg9DK

http://ideone.com/45wUS

同様の問題が定義されていない、

#define short short int 

http://ideone.com/dERGm

+5

'long long long 'はGCC' lolには長すぎます。 –

10

C++の組み込み型は、実装定義サイズを持ちますが、C#では定義されていません。同等の動作が必要な場合は、<cstdint>のtypedefを使用してください。バイトだけでなく、ビット数も!また、charは、signedであってもなくてもよく、代わりにsigned charを使用してください。

あなたがしていることは何でも恐ろしいアイデアのように聞こえますが。ちょっとした愚かなハイブリッド言語ではなく、C++を学んでください。