パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

スラドに聞け:いま使っている言語の仕様、把握している?」記事へのコメント

  • あたりまえだけど、開発環境が64ビット化した時にバイナリデータがずれて難儀した。
    言語仕様で最初からビット幅固定してくれればよかったのにとか思ってしまった。

    • 16bitの変数が使いたければ int16_t を、
      32bitの変数が使いたければ int32_t を使いましょう。
      C99で規格化されています。

      • by Anonymous Coward on 2016年08月25日 18時54分 (#3069861)

        メインフレームとかであった24ビットマシンとか36ビットマシンとかでも使えるのかね?
        ・そういう環境ではint16_t等を未定義にすることが許されている
        ・そういう環境ではC99を満たすコンパイラを作れない
        ・そういう環境ではビットマスクとかで無理やり実現している
        さあどれだ?

        親コメント
        • 答えは1つめですね。

          int16_t などは「処理系定義」(implementation-defined)です。int16_t がなくてもC99として問題ありませんが、int16_t が定義されている処理系では、int16_tは「そのサイズがピッタリ16bitであること」「負数の表現方法は2の補数であること」が保証されます。(素の int は、負数の表現方法も規定されていません。まあ大抵は2の補数ですけど、例えば「符号ビットと絶対値」みたいな内部表現の処理系も許されます。)

          あとは、変な処理系向けの型としては、「int_least16_t」(16bit以上で最小の型)や「int_fast16_t」(16bit以上で処理系最速の型)もあります。こっちは必須。

          親コメント

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...