タグ

C言語に関するdecoy2004のブックマーク (92)

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

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

    やり直しC言語:複雑な宣言の読み方
  • C言語で可変長引数をとる関数を、型安全に書く方法

    C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a

    decoy2004
    decoy2004 2014/12/14
    __VA_ARGS__ マクロは知らなかった。
  • C言語に置き換わるか?現在はFacebookで開発されているD言語について

    こんにちは。開発担当の渡部です。 普段の業務では Web のフロントエンド・サーバーサイドをやりつつ、オフの時は Oculus Rift を触っており Developers Summit 2014 などのイベント等にも多数参加していますが、 日はジワジワと伸びているプログラミング言語についてのお話です。 つい先月、このブログでも取り上げた Objective-C 後継として開発中の Apple Swift や、 JavaScript を置き換えるものとして作られている GoogleDartMicrosoftTypeScript などのように、既存の言語に限界を感じて新しい言語を作るというケースは非常に多いです。 今回はその中から、ハードウェアレベルからアプリケーションまで扱えるシステムプログラミング言語として不動の地位を築いているC言語の後継という大きな目標を掲げて開発

    C言語に置き換わるか?現在はFacebookで開発されているD言語について
    decoy2004
    decoy2004 2014/07/23
    『D言語はネイティブコードを出力する言語としては珍しく、ガーベージコレクション(以下GC)を搭載しています。』
  • Big Sky :: clib の使い勝手にマジ感動した

    C言語でアプリケーションを書くのは他の言語と比べて少し気合が必要ですよね。例えば HTTPからデータを取得する 取得したデータを json パースする 結果の一部を色付きで表示する こんな場合、C言語プログラマは 「HTTP か、じゃぁcurlかな」 「JSON か、parson かな」 「色表示か...エスケープシーケンスでもいいけどWindowsがなー...」 といった事を考え、そこから curl や parson といった資材の調達を始める事になります。途中で新しい機能を追加したくなり、それを外部ライブラリに頼る場合だとその都度資材を調達する必要があり、思考を停止しなければなりません。 この辺は rubyperl、nodejs、golang 等の様に、ちょっとした手間だけで済ませたい物です。 またC言語の場合、ヘッダファイルはシステムの include フォルダに提供元が期待す

    Big Sky :: clib の使い勝手にマジ感動した
  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    decoy2004
    decoy2004 2010/07/18
    「項の置き換え、すなわちdefineのみを使って、関数型言語のようにプログラムを書く」
  • 電脳ミツバチのコンピュータ広報室

    皆さんこんにちは。 最近ヤマトさんなど多くの配達に関するニュースを見かけますね。 今日はそんな配達問題を解決する電子コインロッカーを開発しました。 まずはこちらの動画をご覧ください ロッカーへ近づくとアプリがbluetoothを認識し、閉めることができます。 閉めた人だけが開けられます。 セキュリティキーはアプリ内のチャットシステムで譲渡することも出来、これによって送られた人も鍵を開けることができます 何らかの理由でロッカーへ取りに行けなくなってしまった場合にも他の人に取りに行ってもらうことができます。(鍵送信券は120円) これにより現状初期投資300万円近くかかっていた電子コインロッカーが格安でロッカービジネスを行うことができるようになります。また、ロッカーを使う人も格安で使えます。ロッカーの使用は2時間まで無料。その後6時間ごとに240円かかります。(アプリ内課金でApple社に3割

    電脳ミツバチのコンピュータ広報室
    decoy2004
    decoy2004 2009/05/16
    ややこしい宣言は英語で読め。「C言語ポインタ完全制覇」
  • Amazon.co.jp: C言語ポインタ完全制覇 (標準プログラマーズライブラリ): 前橋和弥: 本

    Amazon.co.jp: C言語ポインタ完全制覇 (標準プログラマーズライブラリ): 前橋和弥: 本
    decoy2004
    decoy2004 2009/05/16
    その理由は、Cの宣言まわりの混乱した文法と、ポインタと配列の間の妙な交換性にあった。
  • Cプログラミング診断室

    書は、発売から10年が経過した『Cプログラミング診断室』に加筆修正す るとともに、のサイズを小さく持ち運びやすく紙も軽いものを選び、どこで も読めるように工夫したものです。レイアウトやイラストも変更しております。 また、表紙デザインは一新しました。 表紙には特別な工夫がされております。詳しくは、書店店頭にてじっくりと表 紙を眺めてみてください。気付く人は気付くはずです

    decoy2004
    decoy2004 2009/05/14
    著者:藤原博文
  • $B#C%W%m%0%i%_%s%0@lLg2]Dx (B

    $B@hF|!";k3P>c32o$K4r$7$$$3$H$G$9!# (B $B;k3P>c32$NJ}$O!"F1$8>r7o (B( $B>c32ZL@ (B) $B$G:#8e$H$bDs6!$7$F$$$-$^$9$N$G!";d$^$?$O5;=QI>O@ $B:#2s!"%W%l!$5$l$?J}$N%[!Welcome to Katsuaki Watanabe's world! $B$OBgJQ8+$4$?$($,$"$j$^$9!#@'Hs0lEY$4$i$s$/$@$5$$!#A4LU$G!" (BLaTeX $B$K6=L#$r$b$C$F%Q%=%3%s$r;O$a!" (B FreeBSD $B$r%$%s%9%H!<%k$7$F$$$k$H$$$&$N$@$+$i!"$?$@<T$G$O$J$5$=$&$G$9!# (B

    decoy2004
    decoy2004 2009/05/14
    著者:藤原博文
  • C言語による最新アルゴリズム事典の詳細情報 : Vector ソフトを探す!

    ソフト詳細説明 『C言語による最新アルゴリズム事典』全ソースコード ・『C言語による最新アルゴリズム事典』掲載の全ソースコードです。 に載せたものと違って,できるかぎりテスト用の main() を補ってあります。に載っていないソースコードやテストデータも若干ですが含まれています。 ご利用についての制限はありません。ただしバグによる損害の賠償などには応じかねますのでご了承ください。バグを発見されたらお知らせいただければ幸いです.

    decoy2004
    decoy2004 2009/05/14
    『C言語による最新アルゴリズム事典』掲載の全ソースコード。 本に載せたものと違いできるかぎりテスト用の main() を補ってある。本に載っていないソースコードやテストデータも若干含まれる
  • [C/C++][Perl] C プログラムから Perl コードを実行する

    [C/C++][Perl] C プログラムから Perl コードを実行する Permalink URL http://www.magicvox.net/archive/2005/10221914/ Posted by ぴろり Posted at 2005/10/22 19:14 Post Comment コメントできます Category Perl スクリプトを、外部プロセスを起動せずに C/C++ で書かれたプログラムから実行するための覚書。Windows 版 ActivePerl の場合、オンラインドキュメントの perlembed のページにサンプルコード付きで詳細な説明がある。VC++ などで /Perl/lib/CORE をインクルードディレクトリとライブラリディレクトリに追加するだけで簡単に実現できる。

    [C/C++][Perl] C プログラムから Perl コードを実行する
    decoy2004
    decoy2004 2007/03/14
    外部プロセスを起動せずに C/C++ で書かれたプログラムから実行する
  • インクルードガード

    [ C++で開発 ] インクルードガード 少し込み入ったプログラムを開発していると、ヘッダファイルを2重にincludeしてしまい、コンパイルエラーとなることがあります。ここでは、その回避方法として使われる内部インクルードガードと、include処理時間を大幅に削減しコンパイル時間を短くする冗長インクルードガードの2つを取り上げます。 (追加)最近のGCCでは#pragma onceも無警告で使用できるようになっているようです。 インクルードガードの必要性 2重インクルードの発生 まず、2重インクルードが発生する例を見てみます。

    decoy2004
    decoy2004 2007/03/05
    ヘッダファイルの数が増えれば増えるほど、指数関数的にコンパイル時間が増大していきます。
  • ヘッダファイルとは

    [ C++で開発 ] ヘッダファイルとは C++の面倒で複雑なものの一つがヘッダファイルの扱いです。Toyプログラムでは問題にならなくとも、大きなプログラムになると、コンパイル時間が増大したり、管理が大変になったり、とやっかいな代物です。 なぜヘッダファイルがいるのか 次のコードはコンパイルエラーとなります。

    decoy2004
    decoy2004 2007/03/05
    定数の表現にはconst変数を使用します
  • C++コーディング雑記

    [ C++で開発 ] C++コーディング雑記 C++のコーディング標準、スタイル、習慣について、思うところを主観にもとづいて勝手にぶちまけるページ。 悪しき風習 妙ちくりんな省略形 特に石器時代のUNIXのC言語の風習だが、やたらめったら省略形を命名している。tmp, chk, prc, ctrl, con, 名前の長さに制限のあるコンパイラやリンカだった時代の名残りだけど、可読性を破壊しているだけ。省略形はやめよう。省略形の方が可読性が高いと思う人は要注意。 プリプロセッサ礼賛 マクロのオンパレード。ちょっと面倒な(と人が思う)コードをマクロに置き換えて悦に入る。一人方言みたいなものなので、可読性を破壊しているだけ。 やたらに条件コンパイルが多いのも困りもの。モードのお化けのようなコンパイル条件は可読性を破壊しているだけ。プログラムA用、プログラムB用と入り込むならクラスを分けようよ。

  • http://homepage3.nifty.com/~masumoto/

  • http://www.sra.co.jp/wingnut/technical-info.html

    decoy2004
    decoy2004 2007/03/05
    GNU Coding Standards
  • fj.comp.lang.c - Google グループ

  • freeml(フリーエムエル)|新しい生活をはじめる羅針盤

    decoy2004
    decoy2004 2007/03/01
    '\0'以降は不定と思われます
  • 文字列リテラルでの初期化 (1) - とくにあぶなくないRiSKのブログ

    cppllでレベルの低い質問が出てるかと思ったら,cppll_noviceの方でちょっと安心しました。 # 暴言*1 →みんなのHappyコミュニティ! freeml[フリー・エムエル] - メッセージ cppll_novice - 1586 この質問にC言語として答えてみましょう。 まず,前半から考えましょう。 char dest[dest_size] = { 0 };と書くと、配列の要素が全て0になりますけど この根拠は「JIS X3010:2003 6.7.8 初期化」にあります。P96には以下の件(くだり)が。 明示的に初期化されないすべての部分オブジェクトについては,静的記憶域期間をもつオブジェクトと同じ規則で暗黙に初期化する。 で,「静的記憶域期間をもつオブジェクトと同じ規則」って何?となるのですが,これはP95で暗黙の初期化について, b) そのオブジェクトの型が算術型の場合

    文字列リテラルでの初期化 (1) - とくにあぶなくないRiSKのブログ
    decoy2004
    decoy2004 2007/03/01
    そのオブジェクトの型が算術型の場合,(正又は符号無しの)0に初期化する。
  • 文字列リテラルによる初期化::CからC++へ

    2006-12-18 RiSKさんのブログのコメント欄でやたらと盛り上がってしまったのですが、char型またはwchar_t型の配列を文字列リテラルで初期化する場合、配列の要素数より(初期化子である)文字列リテラルの文字数の方が少ないとき、ナル文字以降の値はどうなるのか、という話題です。実際のコードで示すと、次のような場合です。 char str[5] = "abc"; C言語であれば、ナル文字以降は '\0' で初期化されることが、規格上はっきりと規定されています。つまり、上のコードは、 char str[5] = { 'a', 'b', 'c', '\0', '\0' }; と等価になります。 C++でも、この辺りの事情は同じだと思っていました。実際、私が知る限りの処理系では、C言語と同じように振る舞います。ところが、C++の規格であるJIS X3014:2003を読むと、ナル文字以降

    decoy2004
    decoy2004 2007/03/01
    {} で囲んだ初期化子の場合には、明示的に初期値を与えていない要素は '\0' になります。