タグ

C言語に関するmather314のブックマーク (3)

  • How to C (as of 2016)

    How to C in 2016 This is a draft I wrote in early 2015 and never got around to publishing. Here’s the mostly unpolished version because it wasn’t doing anybody any good sitting in my drafts folder. The simplest change was updating year 2015 to 2016 at publication time. (Update: Many people have submitted revisions, notes, and improvements. All contributions have been incorporated throughout the pa

  • Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱

    二十五日半狂乱、6日目(の分...orz)の記事 Cのエラーハンドリングを毎回やるのは面倒だ! 前回も言ったが、Cではエラーハンドリングに戻り値とerrnoを用いる. それはそうと例外設計において"無視"は大罪である. だから、関数を呼び出したら戻り値は漏らさずチェックすべきだ. ということで、例えば以下のように逐一戻り値をチェックする. if(send(sockfd, buf, len, 0) < 0){ ERROR("send"); exit(1); } あぁ、面倒だ. 一体コードのどの部分が正常系の処理なのか? ほとんどエラーハンドリング*1で埋め尽くされるじゃないか. そもそもエラーハンドリング部分に書くのは毎回同じコードだし、コードの繰り返しは防ぎたい. エラー処理部分をラッピングして楽をする unpv12eの中でラッパーを被せることによってこの面倒を回避する方法を知った. in

    Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱
  • ポインタの配列?それとも配列へのポインタ?(複雑な変数宣言)

    ポインタの配列?それとも配列へのポインタ? (複雑な変数宣言) よくある勘違いで以下のように配列とポインタが組み合わさった場合、変数fooとbarは何を表すのか混乱する場合があります。 char *foo[100]; char (*bar)[100]; この勘違いは演算子の優先順位を理解していない場合に発生します。更にやっかいなことに演算子*が左から右へ結合するのに対し、演算子[]が右から左へ結合するので特に初心者にはよけい判りづらくなります。 C/C++言語において、演算子[]は演算子*より高いので、コンパイラは[]を先に解釈します。 つまり、"char *foo[100]"の場合、この宣言の解釈順は以下の通りです。 宣言のうち、最も優先順位が高いのは[]である。つまり、変数fooは「何か」が100個ある配列である。 宣言から[100]を除外する。 宣言の残りは"char* foo"

    mather314
    mather314 2013/10/15
    (*bar)[100]が「ポインタの配列」じゃなくて「配列のポインタ」になるのが直感的じゃないなぁ。外側に書いてあるほうがより具象を表すってのはわかりにくい。
  • 1