タグ

cに関するippei-rのブックマーク (24)

  • 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
  • Man page of SIGNAL

    Section: Linux Programmer's Manual (7) Updated: 2020-12-21 Index JM Home Page roff page 名前 signal - シグナルの概要 説明 Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル"と表記) と POSIX リアルタイムシグナルの両方に対応している。 シグナル処理方法 シグナルはそれぞれ現在の「処理方法 (disposition)」を保持しており、 この処理方法によりシグナルが配送された際にプロセスが どのような振舞いをするかが決まる。 後述の表の "動作" の欄のエントリーは各シグナルのデフォルトの 処理方法を示しており、以下のような意味を持つ。 Term デフォルトの動作はプロセス終了。 Ign デフォルトの動作はこのシグナルの無視。 Core デ

    ippei-r
    ippei-r 2015/03/09
  • インライン関数まとめ

    インライン関数についてややこしいところをまとめておきます。 結論から言うと、常に `static inline` を使え、ってことになります。 結果だけ知りたい人は以下は読む必要なし。 ### 最初に ### `inline` キーワードは関数callを高速化せよ、という指定であって、`inline` を付けたからといって、当にインライン展開されるかはわかりません。 実際のところ、最適化オプションをつけていない場合、`inline` を付けても、一切インライン展開してくれません。 最適化オプションによらず、インライン展開を強制させるには `__attribute__((always_inline))` をつけるというやり方があります。 `-O1` オプションをつけた場合、明示的に `inline` がついている場合はなるべくインライン展開しようとするが、`inline`指定がないものにつ

  • やさしいCプログラミング

    ■予告編 ひょんなことから 「やさしいCプログラミング」というのを見つけた。 とにかく面白いCのソースが並んでいた。やさしいというより、面白いというか、 恐ろしいというか、その手のCのソースのオンパレードである。是非、御一読を。 ----まえがきより という表現があり、これはになっているのかと指が震えながら検索したら、 出版物として出ていることが判明した。そして、好運にもこのを入手することが できたのである。 もう、とても素晴らし過ぎて、 『Cプログラミング診断室』 第8章 を上回る秀作であることが判明した。 このをネタに、1章書き上げることはできるであろうが、著作物にまでなっ ているソースプログラムを引用するのは難しいのではないかと思う。 まだ、ぱらぱらと見ただけである。これから、じっくり、皆で飲み屋に行って、 このを肴に一杯やらないと、これ以上の感想は書けそうにない。 2000

    ippei-r
    ippei-r 2012/03/10
    これが出版できたのがすげー
  • プログラマー's研究所/C言語関数ツリー

    C言語関数ツリー 概要 C言語のソースを読み込んで、その関数の構成をツリー状にして画面に出力します。 先頭にファイル名+行番号を出力しているので、ファイルに落としてタグジャンプも可能。 ソース解析、ドキュメント生成に最適です。 使用方法 C>functree *.c FUNCTREE.C 218 main() メイン・ルーチン FUNCTREE.C 160 ├get_home_directory() コマンドラインから、自分のディレクトリを得る FUNCTREE.C 135 │ └usage() 使用法を表示(エスケープシーケンス未対応用) TRE_CNFG.C 82 ├read_configration() 書式の読み込み TRE_CNFG.C 43 │ └get_string() エスケープ文字の変換 FUNCTREE.C 70 ├read_exclude_function_tab

  • http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/j5ec02/winio/index.html

  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

  • なんでも作っちゃう、かも。

    Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。 C言語でコルーチンを実装してみる、その4。今回でコルーチンの連載(?)は最後です。最後にコルーチンを使った協調型スレッドライブラリを実装します。さっそくサンプルコードから見ていきましょう。 int thread1_count=0; int thread1_func(coroutine_t coro) { co_begin(coro); while(1){ thread1_count++; co_yield(); } co_end; } int thread2_count=0; int thread2_func(coroutine_t coro) { co_begin(coro); w

  • http://members.jcom.home.ne.jp/c-plusminus/mitron_report/frame.htm

  • 1バイトのビット幅 | 移植性のあるCプログラミング

    一定期間更新がないため広告を表示しています

    1バイトのビット幅 | 移植性のあるCプログラミング
  • 組み込み系のソフトで変数にVolatile宣言すべき時は、どういう時ですか? - 組み込み系のソフトで変数にVolatile宣言すべき... - Yahoo!知恵袋

    H/Wの信号等を確実に繰り返しリードする必要がある場合などにVolatile宣言した変数を使用します。 コンパイラのプライオリティ(優先度)が高い場合は、最初に1回だけ信号を内部CPUレジスタにリードして、2回目以降はレジスタに読み込んだ1回目のデータをリードデータとして使用してしまう事があるので、それを防ぐ(確実にH/W(メモリ)などをアクセスするようにする)ために、Volatile宣言を使用します。 例)H/W信号がONするまで待ち、その後に何かを行う処理、の場合。 long *signal; signal = 0x1000;/*0x1000番地の信号*/ while(*singal == 0)/*信号がON(0以外)するまで待つ*/ ; /*信号がONしてから行う処理*/ : : 上記の例のプログラムの場合、 最初に1回信号をリードし、その結果を内部CPUレジスタなどに保存し、 2回

    組み込み系のソフトで変数にVolatile宣言すべき時は、どういう時ですか? - 組み込み系のソフトで変数にVolatile宣言すべき... - Yahoo!知恵袋
    ippei-r
    ippei-r 2010/05/13
  • CUnitによるテスト駆動開発

    はじめに CodeZineでの僕のデビュー記事『Cで実現する「ぷちオブジェクト指向」』、おかげさまでなかなか好評だったようです。まだまだCは現役だと実感しました。 前回に引き続きCのお話です。テストをよりどころに実装をすすめ、信頼できるコードを書くためのプラクティス「テスト駆動開発」(TDD:Test Driven Development)を、Visual C++ 2005 Express EditionとUnit Test Framework: CUnitで行います。 対象読者 そこそこのコードは書けるようになったけれど、どうも詰めが甘い/くだらないバグに出くわす/あっちを直すとこっちが壊れ、ぐだぐだになってしまう…そんな症状に悩まされている脱ビギナを目指すプログラマ。 テスト、してますか? 「プログラムは思ったとおりには動かない、作ったとおりに動く」 思ったとおりに作ってないと思ったと

    CUnitによるテスト駆動開発
    ippei-r
    ippei-r 2010/04/21
  • PTL(Portable Thread Library) ver2 マニュアル - リファレンス

    この章は, PTLのリファレンスマニュアルです. スレッド管理のための関数 スレッド属性の操作 #include <pthread.h> int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize); int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr); int pthread_attr_getstack

  • http://www.01-tec.com/document/without_pointer.html

  • C Cookbook - Inline Cの豊富な利用するためのレシピ

    名前¶ C Cookbook - Inline Cの豊富な利用するためのレシピ 説明¶ 私たちの多くにとってレシピを元に料理を作ることは、べれるような形になるまで材料を鍋に単に投げ入れることよりも簡単です。それはプログラミングにも言えます。Inline.pmPerlのためのCのプログラミングを可能な限り簡単にします。簡単に理解することが出来るサンプルがあれば、それがさらに楽になるでしょう。 このクックブックは、小さいけれども完全なコーディング例が増え続ける倉庫になることを意図しています;それぞれはInlineを使ってある仕事を実現する方法を示します。それぞれの例には、そこで実際に行われている機能の詳細について説明する短い解説がつきます。 これらのレシピの多くは世界中のInlineのユーザとで行われたメールでの議論を元に作っています。私が経験した限りでは、InlinePerlとCに関連

    ippei-r
    ippei-r 2010/03/01
  • ヘッダインクルードを減らそう - ryouke's sub page

    なぜか 全能なるCommon.h // プログラム内のすべてのヘッダをインクルードします。 // この便利なヘッダさえインクルードしておけば、他に面倒なインクルードは必要ありません! #pragma once // このファイルの2重インクルード防止 #include "Module1.h" #include "Module2.h" #include "Module3.h" // 以下果てしなく続く このファイルを(当に)プログラム中の全ソースからインクルードした場合、 Module1.h内の字下げを少し修正するだけで、全ソースがコンパイルされることになる。 これはまったくの無駄なファイル依存関係といえる。 あるソースファイルが当に必要としていないヘッダファイルは、インクルードしてはならない。 コンパイル中に優雅に紅茶を飲む楽しみを失いたくなければ、そのままでよいと思われるが、 他人に

    ippei-r
    ippei-r 2010/02/24
  • プログラミング言語 C の新機能

    7. 文法一般 この章では C 言語に新たに加えられた指示付きの初期化子や複合リテラルといった文法や、暗黙時の宣言に関する変更といった、変更された文法について説明します。 7.1 暗黙の関数宣言 現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。 7.2 宣言時の暗黙の型 手続き型言語では、一般的に変数や関数などを宣言して使用する必要があります。もちろん C 言語も例外ではありません。しかし C 言語では特に型

    ippei-r
    ippei-r 2010/02/24
  • The Medical Blog

    ippei-r
    ippei-r 2010/01/28
  • Manpage of READDIR

    Section: Linux Programmer's Manual (3) Updated: 2009-03-30 Index JM Home Page roff page 名前 readdir, readdir_r - ディレクトリを読み込む 書式 #include <dirent.h> struct dirent *readdir(DIR *dirp); int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): readdir_r(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_SOURC

    ippei-r
    ippei-r 2010/01/27
  • ディレクトリ操作dirent.h - アールメカブ

    Programming ここを参照 ディレクトリ名も取得する必要があれば,hidden_dir_h #include<stdio.h> #include<dirent.h> void main(argc,argv) int argc; char*argv[]; { DIR *dir; struct dirent *dp; char path[512]; // ディレクトリは引数から判断する. if(argc<=1){ strcpy(path,"."); } else{ strcpy(path,argv[1]); } if((dir=opendir(path))==NULL){ perror("opendir"); exit(-1); } for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){ printf("%s\n",dp->d_name);// デ

    ippei-r
    ippei-r 2010/01/27