Geekmarks: an Open-Source, API-driven, geeky bookmarking service
Geekmarks: an Open-Source, API-driven, geeky bookmarking service
enumで宣言した列挙定数を文字列に変換したいときのためのプチテクニック。 なお逆に、文字列を列挙定数に変換したいときはこちら→文字列を対応する列挙定数(enum)に変換する【C++】 defineマクロの#演算子(文字列化演算子)は、マクロの引数を見たままの文字列リテラルに置き換えてくれるのでこれを利用することで簡単に実装が可能です。 #include <stdio.h> #define STR(var) #var //引数にした変数を変数名を示す文字列リテラルとして返すマクロ関数 int main() { enum color_tag{ RED, BLUE, GREEN }; printf("%s : %d\n", STR(RED), RED); printf("%s : %d\n", STR(BLUE), BLUE); printf("%s : %d\n", STR(GREEN),
gccで-Wall -Wextraを付けてもなお有効化されない警告オプションがあるそうなので、ドキュメントを読んでその効能を簡単に調べた。 なお、これらのオプションの中にはfortran、Objective-C用のものもあるようだが、それらについては説明を省く。 検証環境: gcc (Rev3, Built by MSYS2 project) 5.2.0 (やや特異な環境なのでLinuxなどの一般的な環境とは状況が違うかもしれない) 参考: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html https://gcc.gnu.org/onlinedocs/gcc/Objective-C-and-Ob
2015/09/02にLinear RPCをOSS (Open Source Software)として公開させて頂きました。 http://linear-rpc.github.io/ Linear RPCはデータフォーマットにMessagePackを使用したRPC (Remote Procedure Call)であるMessagePack RPCの一実装です。今回はC++によるクライアント/サーバーとJavaScriptによるクライアント実装などを公開させて頂きました。Linear RPCは、元々IPネットワーク経由で業務用機器を遠隔制御するためのプロトコルとして実装しましたが、RPCを利用したいすべてのアプリケーションやサービスで利用することが可能になっています。 なお、公開させて頂いた実装についてですが、C++11仕様ではありません。これは、Linux用のC++のコンパイラでC++11
初版作成:2003/01/11 2015年時点での参考資料追記:2015/06/29 目次 前書き 本題 後書き或いは感想 2015年時点での参考・推薦資料 前書き 2015年時点での、より正確で分かりやすい参考書籍の紹介を追記しましたので、そちらもぜひご確認ください。 LinuxやUNIXを扱っていると「共有ライブラリ(shared library)」「ライブラリ(library)」という言葉をしばしば耳に します。特に、最新版を使おうとソースコードから見よう見まねでビルド、コンパイルとやらをおそるおそる行っては見たものの 見事に失敗したときや、或いは上手く動かないときのログファイル中で現れることもあります。 プログラマーであれば、例え初めてLinuxに触ったとしても何となく語感だけでぼんやりと原因が想像できます。 しかしごく普通の ---つまりプログラミングなどに興味関心も無かった--
前回の[C言語] HTTPクライアントを作ってみるの続きです。 こちらの記事(C 言語: OpenSSL を使って HTTPS クライアントをつくる)を参考にさせていただきました。 まずは写経してコンパイル・・と思ったらdeprecatedのwarningの山がッ。 どうやらMac標準で入ってるものを使うとそうなるらしい。 こちらの記事(How to solve this error 'BIO_new' is deprecated in cocoa?)を参考に、OpenSSLのサイトから最新版を落としてきてコンパイルしたらwarningでなくなった。 ちなみに記事中に書いてあるパスと違うところにインストールされたので、以下のようにしてビルドしました。 $ gcc -g https-client.c -o https-client -L/usr/local/lib -I/usr/local/
最近はやたらとCが楽しいです。 (関係ないけど「LINUXシステムプログラミング」っていう本がとても面白かったです。OSがなにをしてくれているかがよく分かりました) 色々やってみたいことがあるけど、まずはプロセス間通信としてpipeを使ったやつをごにょごにょしてみました。 ちなみにこちらの記事を参考にさせていただきました。 やったこと とりあえずpipeを作って、もうひとつ作ったプログラムと通信する、というごくシンプルなもの。 でも標準入力とか標準出力とかを再設定したり、色々やりたいことに近づけた感じ。 標準入力から読み込んで、標準出力に書き出すだけの応答サンプル pipeの前に、まずは応答するだけのサンプルを作る。以下の感じ。 #include <stdio.h> #include <unistd.h> int main() { const int BUF_LEN = 255; char
2. 今日は何の話? libc でもっとも良く使われる関数、 malloc と free の実装の解説 もっと一般的に言うと、プロセスのアドレス空間のうち、 heap 領域とよばれる、場所を操作する関数の説明 解説というと聞こえはいいが、そんな大層なものじゃない 3. Linux での process address space model kernel stack text mmap data bss heap 矢印はデータ量の増加と ともに、伸びる方向 使用中 使用中 使用中 今日は、ここ、 heap と呼ばれる領域のお話 low high free free free 4. 古典的 malloc プログラミング言語 C (いわゆる K&R) で紹介された初期の Unix の malloc 実装 使用中 使用中 使用中 free listの head 使用中 ・ free list を
9. 9 最適化について 「細かい効率のことは忘れて、時間の 97% について考え よう。時期尚早な最適化は諸悪の根源だ。それでも残り 3% についても機会を逃すべきではない」 - Donald E. Knuth 「プログラム最適化の第一法則 : 最適化するな。 プログラム最適化の第二法則 ( 上級者限定 ): まだするな。 」 - Michael A. Jackson 11. 11 最適化の対象 主に Intel の Haswell マイクロアーキテクチャ以降を対象 多くのテクニックは他のプロセッサにも応用できます ベース マイクロアーキテクチャ プロセスルール 登場年 Nehalem Nehalem 45nm 2008 〃 Westmere 32nm 2010 Sandy Bridge Sandy Bridge 32nm 2011 〃 Ivy Bridge 22nm 2012 Hasw
Dmitri Gribenko氏によるBlog記事 "I Do Not Know C" より訳出。原文および訳文のライセンスは CC BY-SA 3.0 に従う。 この記事の目的は、皆に(とくにCプログラマに)「C言語分かってなかった」と言わせることです。 C言語の死角は思っているよりも身近にあり、よくある単純なコードですら 未定義動作(undefined behavior) を含む可能性があると示したいと思います。 記事は質問に対する回答の形をとります。全ての例示コードは別々のファイルに分かれていると考えてください。 (訳注:Qiita/Markdown表現の制約から、読中ネタバレ防止のため文章順序を変更しています。前半には質問のみを、後半には質問と回答の対を訳出しました。) 質問編 1.
Stephen Brennan • 16 January 2015 It’s easy to view yourself as “not a real programmer.” There are programs out there that everyone uses, and it’s easy to put their developers on a pedestal. Although developing large software projects isn’t easy, many times the basic idea of that software is quite simple. Implementing it yourself is a fun way to show that you have what it takes to be a real progra
Let's write a malloc and see how it works with existing programs! This is basically an expanded explanation of what I did after reading this tutorial by Marwan Burelle and then sitting down and trying to write my own implementation, so the steps are going to be fairly similar. The main implementation differences are that my version is simpler and more vulnerable to memory fragmentation. In terms o
21st Century C, 2nd Edition C Tips from the New School Book Description Throw out your old ideas about C and get to know a programming language that's substantially outgrown its origins. With this revised edition of 21st Century C, you'll discover up-to-date techniques missing from other C tutorials, whether you're new to the language or just getting reacquainted. C isn't just the foundation of mo
二十五日半狂乱、6日目(の分...orz)の記事 Cのエラーハンドリングを毎回やるのは面倒だ! 前回も言ったが、Cではエラーハンドリングに戻り値とerrnoを用いる. それはそうと例外設計において"無視"は大罪である. だから、関数を呼び出したら戻り値は漏らさずチェックすべきだ. ということで、例えば以下のように逐一戻り値をチェックする. if(send(sockfd, buf, len, 0) < 0){ ERROR("send"); exit(1); } あぁ、面倒だ. 一体コードのどの部分が正常系の処理なのか? ほとんどエラーハンドリング*1で埋め尽くされるじゃないか. そもそもエラーハンドリング部分に書くのは毎回同じコードだし、コードの繰り返しは防ぎたい. エラー処理部分をラッピングして楽をする unpv12eの中でラッパーを被せることによってこの面倒を回避する方法を知った. in
今日id:mattnさんのブログで前見たハックを実際に使う場面があった。 apr.h typedef int uid_t; perl.h typedef long uid_t; もちろんこのヘッダを同時に読み込むとエラーになるんですが、こういう場合に私がよく使う手として #define uid_t _uid_t #include <apr.h> #undef uid_t #include <perl.h>てな具合に前の宣言を逃してやって、後の宣言を有効に出来る。 Big Sky :: mod_psgiをWindowsポーティングした。 で、実際使ったのはこんなソース。 #include "alloc-list.h" #include "util.h" // I want to see the definition of struct List_tag, // But I don't wan
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く