0

多くの質問で説明したように、ソフトウェアを 32 ビット システムから 64 ビット システムに移行しようとしています。malloc() 関数に問題がありましたが、パラメーターを修正することで解決しました。

コードのその部分で、32 ビット システムで実行する場合は、次を使用できます。

(int**) malloc (const * sizeof(int))

ただし、64ビットシステムでは、次を使用する必要があります。

(int**) malloc (const * sizeof(int64_t))

これらの交差点をif()条件で管理したいので、次のように動作するブール値の isIt64system()関数が必要です。

if(isIt64system()) then [64ビットコード]

else [32ビットコード]

この関数は C++ に存在しますか? ソフトウェアが 32 ビット システムで実行されているか、64 ビット システムで実行されているかを教えてくれる機能はありますか?

4

3 に答える 3

5

サイズに依存する 2 つの分岐を記述するのではなく、移植可能な正しいコード パスを 1 つ記述するだけです。あなたの場合:

(int**)malloc(count*sizeof(int*));

これは、システムのサイズに関係なく正しく機能int*します。


追記: あなたの質問に対するこの文字通りの答えからわかるように、if を持たないほうがよいでしょう:

if(sizeof(int*) == sizeof(int))
    x = (int**)malloc(count*sizeof(int));
else if (sizeof(int*) == sizeof(int64_t))
    x = (int**)malloc(count*sizeof(int64_t));

このコードがいかに馬鹿げた冗長性を持っているか、そしてそれを適切に構成された 1 つのmalloc呼び出しに置き換える必要があることを理解していただければ幸いです。

于 2012-04-19T13:25:27.890 に答える
1

コンパイラには、32 ビットと 64 ビットをチェックできるプリプロセッサ定義があります。

于 2012-04-19T12:41:05.587 に答える