[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

Cとmacroに関するItisangoのブックマーク (4)

  • プリプロセッサでプログラムの質を向上させよう

    「#」演算子と「##」演算子 マクロ定義では、「#」演算子と「##」演算子が使えます。 引数を持つマクロ(関数型マクロ)では記述した引数がそのまま評価されますが、仮引数の前に「#」演算子を付けると、実引数がそのまま文字列になります。 // 通常のマクロの例 #define MACRO_A(a) a int x = MACRO_A(1 + 2); // int x = 1 + 2; // #演算子を使ったマクロの例 #define MACRO_B(b) # b char * y = MACRO_B(1 + 2); // char * y = "1 + 2";

    プリプロセッサでプログラムの質を向上させよう
    Itisango
    Itisango 2013/10/15
    #C の #macro の#と##演算子について。めったに #使わない から #忘れちゃう んですよね。
  • C 言語 マクロ講座 # ## 編: uyota 匠の一手

    # と ## はマクロ関数で使う。 # と ## 共に古くからマクロで実装されている。ところが、これを知らない人達がとても多い。 十年、二十年と C 言語を使ってきたという人でも知らないと言う人が結構いる。これを知らないから、余計なコードを書き、バグを増やし続けるのである。 高級言語と呼ばれる言語の中でも、単純な部類に入る C 言語。その C 言語よりも単純なマクロ言語の構文を把握していないのである。マクロ自体では、できることもたかが知れている。マクロでできるのは、ごく限られた置換や条件分岐処理程度のみだ。C 言語の構文だけでは、それこそ複数のファイルにコードを分けて書くこともできない。 ライブラリを作るのなどは、それこそ不可能だ。 しかし、C 言語はその欠点をマクロ言語を使い前処理することにより、強力な力を得た。C 言語以降もいくつもの高級言語が生まれてきたが、前処理を組み込んである言語

  • [C] NULL と 8 の何故-ウンコード・マニア

    #define TO_STRING(n, str) \ if(n != NULL) { \ sprintf(str, "%d", n); \ } else { \ char s = n; \ sprintf(str, "%s", &s); \ } // ↑NULL は何故かこうしないと正しく "" になってくれない! #define TEST(n, result) \ { \ char buffer[100]; \ \ TO_STRING(n, buffer); \ assert(strcmp(buffer, result) == 0); \ } int test() { TEST(-52, "-52"); TEST(-11, "-11"); TEST(-07, "-7"); TEST( 03, "3"); TEST( 05, "5"); TEST( 8, "8"); // 8 は何故か

    Itisango
    Itisango 2012/08/19
    マクロの濫用も気に入らないなぁ。
  • “本物のマクロ”でCのコード行数を半分に! - @IT

    2009/09/07 毎年夏に開催される軽量プログラミング言語(LL:Lightweight Language)をテーマにした「LLイベント」。第7回目となる「LLTV」が、2009年8月29日に東京・中野で開催された。この記事ではプログラムの一部、「大改善!!劇的ビフォーアフター」をレポートする。前編では、Rubyによるfortuneコマンドの“増築”と、Firefox拡張によるslコマンドの実装というネタ系発表をレポートした。中編となる記事では、C言語にLisp風のマクロを取り入れ、lsコマンドのソースコードを約半分に“修繕”する匠の技をレポートする。後編では、売り場業務が滞りがちだった販売管理システムをbashコマンドで“建て直した”という劇的ビフォーアフターの発表をレポートする。 Cで書かれたlsのソースコードの問題点 「Real/Macro Metaprogramming On

    Itisango
    Itisango 2010/09/02
    かえって解り難くなってる気が。LISPは好きだけど。
  • 1