タグ

C言語に関するaceraceaeのブックマーク (9)

  • C言語の高度なマクロ機能を活用したプログラミング

    稿ではC言語のマクロ機能について、高度な使い方をご紹介します。はじめに、関数形式マクロについて、ありがちなミスの回避方法に焦点を当てながら、説明します。次に、#および##演算子がどのように解釈されるかを示します。そして、do{}while(0)というトリッキーな記述についてもご紹介します。最後に、#ifまたは#ifdefのどちらが条件付きコンパイルのために好ましいか、という話題に触れます。 関数形式マクロの問題 関数形式マクロは、一見シンプルで単純な構造に見えます。しかし、実際に使ってみると、たくさんの欠点に気づくでしょう。ここで、いくつかの具体例と、その例が示す問題点、それらの解決策を示します。 マクロのパラメータをいつもカッコでくくる まずシンプルなマクロを見てみましょう。 #define TIMES_TWO(x) x * 2 単純な使用においては、これで問題ないです。例えば、TIM

  • ポインタ宣言の*記号、左寄せ派? 右寄せ派?

    C/C++でポインタ変数を宣言するときの*記号をint* a;のように左寄せで書くか、int *a;のように右寄せで書くか。 右寄せで書く場合、「Cでは宣言と使用の文法を一致させる」という規則から考えれば素直に解釈できるという話。

    ポインタ宣言の*記号、左寄せ派? 右寄せ派?
    aceraceae
    aceraceae 2021/09/28
    右寄せだな。char *p;は*pがchar型であってポインタであるpを実体のcharにするためのものが*だと思ってるし。
  • K.Maebashi's home page

    メンバーズホームページは、 2004年8月22日をもって完全に閉鎖しました。 2008年7月11日現在、転送設定もなくなっているようです。 Contents 「C言語 ポインタ完全制覇」のページ (正誤表) 「Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門」のページ (正誤表) 「プログラミング言語を作る」のページ 正誤表 「C言語 ポインタ完全制覇」(旧版)のページ (正誤表) 「C言語 体当たり学習徹底入門」のページ (正誤表) 「Java謎+落とし穴徹底解明」のページ (正誤表) 「センス・オブ・プログラミング!」のページ (正誤表) CプログラマーのためのJava Q&Aのページ。 Java Worldに以前連載されていた記事に関するページです。 Software Design 2010年8月号の記事のダウンロードページ プログラマなページ 配列とポインタの

  • やり直しC言語:複雑な宣言の読み方

    C言語は宣言文が非常に読みにくいことで有名で、後発のGo言語はこれを批判して宣言の構文を変えています。私もずっと読むのが苦手だったのですが、私の頭が悪いのではなく、C言語の仕様がヘン、ということらしい。 今まで飽きるほどこの手の解説は書かれてきてるわけですが、自分なりにまとめないと覚えた気がしないので、あえてまとめておきます。ここに書いてある内容は、「C言語ポインタ完全制覇」に詳しく書いてあります。 型の派生 C言語では、int, char, floatなどの基型から、配列やポインタを派生していくことができます。対象を並べたものが配列で、対象を指し示すのがポインタです。 配列やポインタからも配列やポインタを派生できるので、派生パターンは無限に存在します。 int int の配列 int の配列 の配列 ... int へのポインタ int へのポインタ へのポインタ ... int への

    やり直しC言語:複雑な宣言の読み方
    aceraceae
    aceraceae 2021/03/18
    というか宣言そのものよりも最後にあるような複雑な typedef を読み取るのがいちばん難しいと思うんだけどな。宣言が読めないなら typedef はもっと読めないと思うんだけど。
  • セルフホスト可能なCコンパイラを書く

    最近、コンパイラを書くことが流行っているようだ。流行に乗ってやってみたらいろいろな知見が得られたので紹介したい。 コンパイラを書くと一口に言ってもいろいろなスコープがある。ここではC言語を用いてCコンパイラを書くことを選択した。C言語は言語仕様的にコンパクトで広く知られている。また、ツールとしてのCコンパイラも普及している。その場合、自分が書いたCコンパイラで、自分が書いたCコンパイラのソースコードをコンパイルすることが原理的には可能だ。これをセルフホストという。ひとつの到達目標として非常に興味深い。 当初は冬の間に終わらせる予定だったのだが春まで伸びてしまった。しかし、春になっても寒かったり雨で家に居る日が多く、アウトドアシーズンまでに目標のセルフホストを達成することができた。 昔、Cのインタプリタを書いたことがあったが、コンパイラを書くのは、はじめてである。時代も進んで開発手法が変わっ

  • 「ふつうのLinuxプログラミング」でLinuxの基本概念やシェルの仕組みについて学んだ - $shibayu36->blog;

    最近golangでCLIツールを作っていたのだけど、Linuxのお作法とかいまいち分かっていなかった。そこでそのあたりのことが学べそうな「ふつうのLinuxプログラミング」を読んだ。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道 作者:青木 峰郎SBクリエイティブAmazon このLinuxにおいてC言語でプログラミングする方法を、Linuxでの重要な概念も含めて教えてくれる。このを読めばとりあえずC言語を使ってLinux用のプログラムを書き始めることが出来るようになりそうだった。 それでC言語を使わない場合でも役に立つの?ということだけど、非常に役立ちそうで面白かった。なぜなら、単なるプログラミングの方法を教えてくれるだけではなくて、 Linuxの重要な考え方をファイルシステム・プロセス・ストリームという概念にまとめて教えてくれ

    「ふつうのLinuxプログラミング」でLinuxの基本概念やシェルの仕組みについて学んだ - $shibayu36->blog;
  • C言語1000行以下で開発されたエディタ「Kilo」

    このほど、「antirez / kilo|GitHub」において、Salvatore Sanfilippo氏によってC言語を使い1000行以下のソースコードで開発されたエディタ「Kilo」が公開された。2条項BSDライセンスの下でオープンソース・ソフトウェアとして公開されている。ほかのライブラリに依存することなく開発されており、作業を始めてから数時間ほどで開発されたと説明がある。C言語による学習素材やエディタ開発のベースソースコードとして利用できる。 Kiloはclocを使ったカウントでコメントや空行を除いた行数が956行とされており、1000行を下回っている。開発にはcursesライブラリといった基的なライブラリも使われておらず、VT100の基的なエスケープシーケンスを使って開発されている。エディタにおける保存や終了といった操作には次のキーが割り当てられている。 Ctrl-S 保存

    C言語1000行以下で開発されたエディタ「Kilo」
    aceraceae
    aceraceae 2016/07/21
    久しぶりのC言語ネタ。とりあえずソース読もう。
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
    aceraceae
    aceraceae 2016/02/19
    つい最近久しぶりにCで書かれたソースをいじらなきゃなんない事態に遭遇したからいつか役に立つかもしれない。
  • C言語分かってなかった (I Do Not Know C) - Qiita

    Dmitri Gribenko氏によるBlog記事 "I Do Not Know C" より訳出。原文および訳文のライセンスは CC BY-SA 3.0 に従う。 この記事の目的は、皆に(とくにCプログラマに)「C言語分かってなかった」と言わせることです。 C言語の死角は思っているよりも身近にあり、よくある単純なコードですら 未定義動作(undefined behavior) を含む可能性があると示したいと思います。 記事は質問に対する回答の形をとります。全ての例示コードは別々のファイルに分かれていると考えてください。 (訳注:Qiita/Markdown表現の制約から、読中ネタバレ防止のため文章順序を変更しています。前半には質問のみを、後半には質問と回答の対を訳出しました。) 質問編 1.

    C言語分かってなかった (I Do Not Know C) - Qiita
  • 1