タグ付けされた質問 「openbsd」

6
ビットごとのAND演算子を使用した配列宣言へのCポインター
次のコードを理解したいと思います。 //... #define _C 0x20 extern const char *_ctype_; //... __only_inline int iscntrl(int _c) { return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _C)); } これは、obenbsdオペレーティングシステムのソースコードのctype.hファイルに由来します。この関数は、charがASCII文字の範囲内の制御文字または印刷可能な文字であるかどうかをチェックします。これが私の現在の考えの連鎖です: iscntrl( 'a')が呼び出され、 'a'がその整数値に変換されます 最初に_cが-1かどうかを確認し、次に0を返します... 未定義のポインタが指すアドレスを1だけインクリメントします このアドレスを長さの配列へのポインタとして宣言する(unsigned char)((int) 'a') ビットごとのand演算子を_C(0x20)と配列(???)に適用します。 どういうわけか、奇妙なことに、それは機能し、0が返されるたびに、指定されたchar _cは印刷可能な文字ではありません。それ以外の場合、それが印刷可能である場合、関数は特別な関心のない整数値を返すだけです。私の理解の問題は、ステップ3、4(少し)および5にあります。 助けてくれてありがとう
9 c  openbsd 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.