#ふぁぼした人にC言語の仕様を1つ紹介する

なるほど分からん
6
リュート @lute_mumi

私もふぁぼした人に何かするタグやりたい……。

2014-08-01 22:41:41
リュート @lute_mumi

@komami_n int型が -32768~32767 を表せる環境で、単に -32768 と書くとlong型扱いになります。これは先に32768がlong型として処理されるためで、int型にしたい場合は -32767-1 のように書きます。

2014-08-01 22:57:19

long 型が 32768 を表せる環境を想定しています。


リュート @lute_mumi

@0presea0 char 型が 1byte であることは仕様として明確に定められていますが、1byte が 8bit であるかどうかは処理系定義です。さらに言うと、intなどの他の型の大きさが 1byte の整数倍である保障もありません。

2014-08-01 23:05:39
リュート @lute_mumi

@azardon sizeof 演算子で得られるbyte数は、実は切り上げられています。int型が12bit、1byteが8bitであるような環境ではsizeof(int)が2となるため、正確なbit数を求めたい場合は~0に対して立っているビットを数えるくらいしかありません。

2014-08-01 23:23:27

こういう処理系が実在するのかは不明です。


リュート @lute_mumi

@KasaP_d void* 型はどんな型でも代入できる汎用ポインタとしてよく知られており、K&R第2版にもそのように書かれています。しかし、JIS規格のJISX 3010を見てみると、void* と互換性のある型の中に、関数ポインタだけが書かれていません。

2014-08-01 23:29:16
リュート @lute_mumi

@naninunenosi 単項+演算子は何もしない演算子であると思われがちですが、実際には算術演算であるため整数拡張を伴います。たとえばchar型の変数cに対し、sizeof(c)とsizeof(+c)を比較してみると、多くの処理系で異なる値となります。

2014-08-01 23:37:33
リュート @lute_mumi

@sakumasu_drums ANSI Cにおいて、外部識別子の意味がある(区別可能な)先頭の文字数として保障しているのはわずか6文字です。つまり、先頭の6文字が同じである外部識別子は区別可能である保障がありません。これはC99で若干緩和され、31文字となりました。

2014-08-01 23:56:49
リュート @lute_mumi

@herauro 可変長引数関数では第2引数以降の仮引数の型を指定できないため、float型の変数を与えても暗黙の型変換によりdouble型となります。printf関数において、変数がfloat型であってもdouble型であっても同じ%fという書式設定なのは、このためです。

2014-08-02 00:14:42

× 可変長引数関数では第2引数以降の仮引数の型を指定できない
○ 可変長引数関数では可変部分の仮引数の型を指定できない


リュート @lute_mumi

@x2oVo2x ローカル変数以外の変数を、初期化子を使わずに宣言した場合、その変数は仮の定義となります。同じ変数に対して、仮の定義は何度行ってもかまいません。しかし、初期化子を使った(仮でない)定義は1度しか行えないため、2回以上初期化子を使った宣言をするとエラーとなります。

2014-08-02 00:56:33
リュート @lute_mumi

@meta_BE 文字定数を表す方法には、8進数で直接文字コードを指定する方法もあります。たとえば文字コー158の文字定数は、'\236' のように、\ の後ろに8進数を直接書きます。いわゆるヌル文字を表す '\0' というのは、この表記法を利用しています。

2014-08-02 01:40:52

× 文字コー158
○ 文字コード158


リュート @lute_mumi

@asxkyo_ ポインタの比較は、同じ配列内を指すポインタ同士でのみ正しい結果が保障されます。たとえばint a[5];のとき、&a[-1]や&a[6]を比較しても結果は保障されません。ただしこれには例外があり、最後の要素の1つ後ろ(&a[5])だけは比較結果が保障されます。

2014-08-02 02:16:03
リュート @lute_mumi

締め切ります。ふぁぼってくださった方、ありがとうございました。仕様に関して誤りがありましたら教えてください。「言っている意味が分からない」などに関しては、諦めてください。

2014-08-02 02:20:20
リュート @lute_mumi

@cooc2 締め切ってしまったので軽めのもので。 C言語の十進数の定義は、0以外で始まる、0~9を使った数のことです。つまりただの 0 は十進数ではありません。0 は八進数に分類されます。

2014-08-02 02:29:01

舞台裏

リュート @lute_mumi

何も考えず完全に見切り発車でやってしまったから、今必死でネタ探してる。

2014-08-01 23:01:06
リュート @lute_mumi

ボカロ曲を紹介するとかにすればよかった。

2014-08-01 23:30:10

そしてようやく全員分終了したところで……


こまみ @komami_n

拡散しちゃう(てへぺろ

2014-08-01 23:58:26