タグ

ブックマーク / www.kijineko.co.jp (9)

  • 代入できない構造体 | 株式会社きじねこ

    備忘録として書きとめておきます。 C++であれば、構造体をはじめとしたクラスを代入できないようにするのは簡単です。しかし、Cでも代入できない構造体を作りたくなることがときどきあります。特定の関数またはマクロを使ってコピーしないといけないようなものがそうで、そうした構造体を代入演算子を使って代入すると破綻してしまいます。そこで代入演算子で代入しようとするとコンパイルエラーにできる方法がほしいわけです。 次のように、幅0のビットフィールドをconst修飾子付きで持たせてあげると代入できなくなります。

  • Account Suspended

    Account Suspended This Account Has Been Suspended

  • Account Suspended

  • Account Suspended

    Account Suspended This Account Has Been Suspended

  • Account Suspended

    Account Suspended This Account Has Been Suspended

    p260-2001fp
    p260-2001fp 2010/03/02
    サーティファイ情報処理能力認定委員会 のC言語検定。要するに使えない内容という事か・・・
  • 普通にウェブページを書くにもDoxygenを使うへたれっぷり | 株式会社きじねこ

    p260-2001fp
    p260-2001fp 2010/01/26
    Doxygenを各種自動生成ツールとして使う
  • 「簡単で難しい“正確なC言語”」を読んで | 株式会社きじねこ

    ITProの記事「簡単で難しい“正確なC言語”」を読みました。その中に「標準Cトリビア3題」というちょっとしたクイズがあったので挑戦してみたのですが、期待されている回答ができたとはとてもいえない状況でした。まずは問題を引用します。 Q1:main関数の型はintである。 Q2:int型は少なくとも-3万2768〜3万2767を扱えなければならない。 Q3:\0はナル文字と定義されている。 まずはQ1からです。私の見解はこうです。main関数は、int main(void)、int main(int argc, char *argv[]),、これら2つと等価な方法、または処理系定義の方法で定義されるわけですが、いずれにせよ「関数型」であり、「オブジェクト型」である int ではありません。よって×です。 次にQ2ですが、ITProの記事に書かれている内容に加えて、2の補数表現であっても、符号

  • [迷信] abs は常に非負の値を返す | 株式会社きじねこ

    abs 関数というのは絶対値を求める関数です。C では int 型の引数を受け取り int 型の値を返します。C++ では、int 版以外に、long 版、float 版、double 版、long double 版、std::complex クラステンプレート版が多重定義されています。絶対値を求める関数ですから、ゼロまたは正の値を返すのが数学的に正しい振る舞いです。 ところが、現実には必ずしもそうはならない場合があります。まずは、浮動小数点数や複素数の引数として非数(NaN)が渡された場合がそうです。これについては、それほど大きな問題になることはないでしょう。問題は整数の場合です。 abs 関数に INT_MIN を与えた場合を考えてみてください。負の値の内部表現に 2 の補数を使う処理系(実質的にすべての処理系と考えても、あながち間違いとはいえません)では、INT_MIN の絶対値は

  • sizeof(char)==sizeof(int)となる処理系の奇妙な世界 | 株式会社きじねこ

    C/C++では、汎整数型のサイズは最小表現範囲と相対的な大小関係が決まっているだけで、それ以外は処理系定義になります。char型は少なくとも8ビット以上あれば何ビットでもよく、char型のサイズが1バイトということになります。int型も16ビット以上であれば何ビットでもかまいません。このことから、char型とint型のサイズがともに16ビットとか64ビットとかでもまったくかまわないということになります。 理屈の上ではわかっていても、具体的な処理系と関わることがなければ実感がわいてきません。私の場合、もう長い間、TOPPERSプロジェクトに関わってきた関係上、JSPカーネルが対応しているテキサス・インスツルメンツ製のDSPが16ビットのchar型を持っているため、決して机上の空論ではなく、移植性に関する重要な問題であるととらえてきました。 というわけで、今回、char型とint型のサイズが同

    p260-2001fp
    p260-2001fp 2009/09/09
    char型を汎整数拡張するとint型ではなくunsigned int型になってしまうことが問題「標準ライブラリは、明らかに汎整数拡張によってint型になることを前提として仕様が決められているようですから。」
  • 1