これの主な理由は、完全に移植可能な C ライブラリを作成しようとする試みです。数週間後、残念ながらあまり柔軟ではない定数になりました(別の定数を定義するために定数を使用することはできません)。アドバイスや批評家のためのThx。
2 に答える
1
最初に頭に浮かぶのは、stdint.hの使用を検討したことがありますか?そのおかげで、ライブラリはC99準拠のコンパイラ間で移植可能になります。
于 2012-03-08T21:07:29.510 に答える
1
あなたが求めるものは不可能です。前に述べたように、標準に準拠した C の実装はlimits.h
正しく定義されています。何らかの理由で正しくない場合は、コンパイラのベンダーを非難してください。特に組み込みシステム用にクロスコンパイルしている場合は、コンパイル時に真の制限を「動的に」発見することはできません。したがって、ターゲットアーキテクチャはコンパイルシステムよりも小さい整数を持つ可能性があります。
制限を動的に検出するには、実行時にオーバーフローが発生するまでビット シフト、乗算、または加算を行う必要がありますが、メモリ内に定数ではなく変数があるため、大幅に遅くなります。(アーキテクチャが異なればビットレベルの表現が異なり、特に float などの符号付きの抽象的な数値表現では、算術演算が制限の周りで少しファンキーになることがあるため、これはとにかく信頼できません)
stdint.h
およびにある標準の型と制限を使用するlimits.h
か、制限をすべて一緒にプッシュしないようにしてください。
于 2012-03-09T06:55:10.437 に答える