はじめに 本記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。
If you're looking for a better understanding of computers or the C language in general, try your hand at writing a virtual machine in C from scratch.Menu Implementing a Virtual Machine in C 07 May 2015 Introduction Here's the GitHub to show what we'll be making, you can also compare your code to this repository in case you have errors. GitHub Repository I thought I would write an article about bu
6 Extensions to the C Language Family ¶ GNU C provides several language features not found in ISO standard C. (The -pedantic option directs GCC to print a warning message if any of these features is used.) To test for the availability of these features in conditional compilation, check for a predefined macro __GNUC__, which is always defined under GCC. These extensions are available in C and Objec
最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間を食っていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf
以前に8ccというCコンパイラをゼロからひとりで開発していたときのログです。40日でセルフコンパイルできるところまで到達しています。日付はすべて2012年です。コードとヒストリはすべてGitHubで見れます。 3月4日 というわけでコンパイラを作っているわけだけど、1000行くらい書いたらそれなりに動き始めてきた。こんなのも動くし: int a = 1; a + 2; // => 3 こういうのも通る。 int a = 61; int *b = &a; *b; // => 61 文字列は文字の配列として扱っていて、配列をポインタに成り下げる振る舞いも実装しているので、こういうのも通る。関数呼び出しもある。 char *c= "ab" + 1; printf("%c", *c); // => b 前回もこのあたりはがんばって実装したからここまで作るのはわりと単純作業かも。二回目だから配列とか
Written by Mattt August 12th, 2013 This article has been translated into: 中文 What passes for randomness is merely a hidden chain of causality. In a mechanical universe of material interactions expressed through mathematical equations, it is unclear whether nature encodes an element of chance, or if it’s a uniquely human way to reconcile uncertainty. We can be sure of one thing, however: in the clo
So that’s it, you read this article, and this post, and this, and this, and you spent too many time trying to debug 8 pages long compilation error messages, and you also spent hours trying to follow your code path involving operator overloading, copy constructors, and virtual class methods called from constructors or whatnot. You have had enough of it. Yout think it’s time for you to stop using C+
長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその
SGソフトウェアの開発日記(鉄道ゲーム開発もしてますが最近はDLNAがらみの開発中心) ハードディスク故障に備えるための省スペースデータ保護ツール「RAIDっぽい」や、DVD-RAM用コピーツール「VRストリーム抽出ツール」など、各種ツールの商品開発の日々の出来事や、よもやま話などを綴っています。 PR SG箱庭鉄道線路を敷いて列車を走らせよう! SG箱庭鉄道 PCユーティリティファイル名の番号の桁を揃える 整列! マルチドライブ高効率バックアップ RAIDっぽい 保管期限切れのファイルを一括削除 保管期限切れファイルクリーナー まとめてファイルを移動 ファイル移動ツール ファイルの重複を検出 ファイル重複検出ツール サブフォルダ内のファイルを集約 サブフォルダ内ファイル集約ツール 空のフォルダーを削除 空フォルダー削除ツール ホームネットワーク複数のMPE
おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 最近は結構 matsuu さんのブクマから見つけて記事を書いてたけど今日はそうじゃない所からご紹介。 Jansson — C library for working w
子供のころからできるだけ手抜きして成果を挙げることだけは長けている山本です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,
リンク先には,次のような記述があります. Looks like on ARM architecture, GCC and other compilers may mis-optimize memcpy and assume certain memory alignment, whichcreates errors on unaligned access. To avoid this, either don't use memcpy, or, cast the pointers to char* to disable this misoptimization. More details here: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3934.html 意訳) ARM みたいに memcpy で
従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介しよう。(特集:64ビットコンピューティング最前線) C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラ
GNU cflow GNU cflow analyzes a collection of C source files and prints a graph, charting control flow within the program. GNU cflow is able to produce both direct and inverted flowgraphs for C sources. Optionally a cross-reference listing can be generated. Two output formats are implemented: POSIX and GNU (extended). The package also provides Emacs major mode for examining the produced flowcharts
Hello for the secondthirdfourth time, Reddit. This was a 10-minute lightning talk. It is a presentation, not a book. I spoke when presenting it. Not everything that was said is on these slides, as that would have made for a boring talk. Yes, there are counter examples to some of the things mentio...
A nice, little known C feature: Static array indices in parameter declarations The people who created C sure loved keeping the number of keywords low, and today I’m going to show you yet another place you can use the static keyword in C99. You might have seen function parameter declaration for array parameters that include the size: The function will still receive a naked int *, but the [10] part
この記事は PostgreSQL Advent Calendar 2012 の13日目の記事です。 昔からデータベースエンジン関係の研究をしているうちの研究室 では、「PostgreSQLを使う」というとPostgreSQLのコードをいじってTPCベンチマークを走らせることを指すので、未だにSQLとか書けなくて困ることが多いのですが、幸か不幸かPostgreSQLのソースコードはそこそこ読めるようになりました。 そんなわけで、PostgreSQLのソースコードの中でも、今回のAdvent Calendarのネタとしてメモリ管理の部分について紹介します。 これからPostgreSQLのコードを読んでみたいという人にとっては、コードのどの部分を読んでも必要となる知識なので、割と役に立つとおもいます。 【宣伝】大晦日にデータベースの同人誌をコミケで売ります 本題に入る前にいきなり宣伝で恐縮ですが
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く