タグ

C言語に関するInoHiroのブックマーク (17)

  • 標準Cライブラリの実装

    しばらく忙しくて放置していますが、また春頃になれば、それなりに注力できる可能性があります。もっとも、そのころになれば、JSPカーネルではなく、ASPカーネルに対応することを考えるような気もしますが...。 さて、このたび、このブログで公開しているソースコードのライセンスに関して質問を受けました。このブログは、あくまでも実装レポートで、私が実装中に考えたことや、判断に迷ったことなどを交えながら、記録を残して行けたらと思って始めたものです。現在公開されている内容も、ざっと動作は見ていますが、いろいろバグも指摘されていますし、私自身も過去の記事のバグを見つけています。 そんな感じで、まだ現状では非常に完成度は低いと考えてください。それでもよければ、あくまでも自己責任の下で、自由に利用していただいてかまいません。ただし、(合法・非合法にかかわらず)反社会的または反人道的な用途への利用だけはご遠慮く

  • 猿でも解る C言語講座 - STEP 7

    STEP 7 - 標準関数 │ ├ ヘッダファイル ├ プロトタイプ宣言 ├ メモリ割り当て関数 │ ├ malloc関数 │ └ free関数 ├ データ変換の関数 │ ├ atoi関数 │ ├ atol関数 │ ├ atof関数 │ ├ toupper関数 │ ├ tolower関数 │ ├ itoa関数 │ └ ltoa関数 ├ 文字列を操作する関数 │ ├ string.h │ ├ strcpy関数 │ ├ strlen関数 │ ├ strcat関数 │ ├ strcmp関数 │ ├ strncpy関数 │ └ strncat関数 ├ 時間に関する関数 │ ├ time.h │ └ time関数 └ 計算用の関数 └ math.h printf や scanf 等、予め用意されているものが標準関数である。 <ヘッダファイル> 最初に必ず書くインクルード句は、それ自体が一つの関数であ

  • 複雑な演算子

    第14章 複雑な演算子 基的な演算子については第4章で説明しましたが、この章では、もう少し複雑な演算子について説明します。 14-1.ビット演算子 ビット単位でデータ操作をするものです。対象は整数に限られます。 【ビット演算子】 演算子説明

  • 最短経路の探索 - nojimaの日記

    なんか迷路の最短経路を求めよっていう問題がはやってるっぽいので解いてみた。いつもはC++を使ってるけど、今日はなんとなくCで書いてみた。アルゴリズムは幅優先探索。 #include <stdio.h> #include <string.h> #define N (100+2) char field[N][N]; int yqueue[N*N], xqueue[N*N]; int yprev[N][N], xprev[N][N]; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, -1, 0, 1}; int main(void) { int i = 0, h = 0, first = 0, last = 0; while (fgets(field[h], N, stdin)) { char *p = strchr(field[h],

    最短経路の探索 - nojimaの日記
  • Cの配列はa[i][j]とa[i*Nj+j]のどちらが速いか試してみた

    Cでベクトル演算沢山やるような数値計算をするときに多次元配列を a[i][j] と a[i*Nj+j] の どちらで書くのが速いか気になったので試してみた.(Njは添え字jの数ね.) x 始めは, a[i*N+j]で書くよりa[i][j]で書くほうが速いかw ってか当たり前かな.毎回i*Nやるの無駄だし. — Twitter / tkf: a[i*N+j]で書くよりa[i][j]で書くほうが … と思ってたけど, ポインタ参照(*)とアドレス取得(&)って四則演算くらい計算コストかかるもんなんだろうか — Twitter / tkf: ポインタ参照(*)とアドレス取得(&)って四則演算く … とか良くわからないなと思ってたら @tkf CPU内部の四則演算より、メモリアクセスの方が、一般に時間はかかるでしょう。キャッシュ (先読み)メモリがあるのは、そのためでしょう。 — Twitter

    Cの配列はa[i][j]とa[i*Nj+j]のどちらが速いか試してみた
  • 謹賀新年 2010

    以下のような年賀状を配らせていただきました。 書いてあるソースコードは以下の通りです。 #include <stdio.h> #include <time.h> int roukan[]={0x00069996, 0xF2262,0xF4296,0x69296, 0x2F <<12 |0xA <<8| 0x62, 0xE1 <<12 |0xE <<8| 0x8F, 0x69 <<12 |0xE <<8| 0x86, 0x22 <<12 |0x2 <<8| 0x1F, 0x69 |0x6 <<8| 0x96, 0x61 <<12| 0x796};void/**/yuyuyoumu (int/**/n,int/**/yuka){int/**/d=roukan[n]>> yuka *04; int i=3; for(;i>=0;--i){putchar((d>>i)&1?'*':' ');}}

  • 絵で見てわかるC言語入門 - 第1章 - J

    そういえば勉強会の時に、「関数ポインタを返す関数はどうやって書くか?」みたいになったが、僕はそういう時は$ man signal して調べる派である。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html さて、C言語を使い慣れた人には常識ですが、C言語初心者にとって少し難しいのが、変数の宣言です。 例えば、初心者にとって、関数ポインタの配列へのポインタを返す関数の宣言を書くのはあまり簡単ではありません。 C言語の初心者には、以下のようなコードを書くのは少し難しく、また、C言語にあまり慣れていない人は、typedefなどを使ってしまいがちです。 typedef int (*func_t)(int); typedef func_t func_arr_t[10]; extern func_arr_t *x[40]; in

    絵で見てわかるC言語入門 - 第1章 - J
  • C言語〜ゲームプログラミングの館〜

    ※ 更新履歴 ※ 2017/11/03 ・sp.8章追加 2017/10/11 ・配布しているプロジェクトをVisualStudio2017に更新(それにまつわる説明も更新) 2015/09/12 ・s.3章 Androidのようなボタンの作り方(C++) 追加 2013/09/02 ・VisualC++2012のプロジェクトを追加 2013/02/23 ・d3.5章追加 2013/02/20 ・d3.1章追加 ・d3.2章追加 ・d3.3章追加 ・d3.4章追加 2013/01/19 ・sp3章追加 ・sp4章追加 ・sp5章追加 ・sp6章追加 ・sp7章追加 2012/06/23 ・3.14章追加 2012/06/16 ・sp1節追加 ・sp2節追加 2012/02/11 ・d6節追加 2011/11/10 ・h11章追加 2011/10/31 ・s1章追加 ・s2章追加 2011/

  • JSONView

    Tools JSON Viewer QRCode Generator

  • [C]文字列の配列を返す関数って - ちょっと練習

    C言語です。 はじめてEclipseのC/C++版を使ってみたりしてます。 ctrl + spaceで関数を補完してくれるんですね!! 文字列の配列を返す関数ってどう書くのだろうと、記憶をたどりつつ。 あやうい。 Orz... char **ss = (char **) malloc(sizeof(char *) * len); #include <stdio.h> #include <stdlib.h> #include <string.h> char** b(int len); int main(void) { int cnt = 0; while (cnt++ < 900000) { int len = 100; char** ss = b(len); int i = 0; for (i = 0; i < len; i++) { fprintf(stderr, "%d %s\n",

    InoHiro
    InoHiro 2009/06/22
    地味にわからなくなる
  • C言語勉強中です。fread関数、fwrite関数について教えて頂けないでしょうか。 - 参考書にて、第1引数は読み取ったデータの... - Yahoo!知恵袋

    C言語勉強中です。fread関数、fwrite関数について教えて頂けないでしょうか。 参考書にて、第1引数は読み取ったデータの格納先のポインタ、書き込むデータの格納先のポインタ、第2引数には1個のデータの大きさ、第3引数にはデータの個数、第4引数にはストリームへのポインタ、という様に理解していますが、下記のようなサンプルが記載されています。 while ((n = fread(buf, BSIZE, 1, src)) > 0) fwrite(buf, n, 1, dst); の部分がよく理解できません。 freadで読み取りに成功した個数をnに代入し、それを書き込む時に大きさn、個数1個を書き込む??? while((n = fread(buf, sizeof(char), BSIZE, src)) > 0) fwrite(buf, sizeof(char), n, dst); としても良

    C言語勉強中です。fread関数、fwrite関数について教えて頂けないでしょうか。 - 参考書にて、第1引数は読み取ったデータの... - Yahoo!知恵袋
  • fwrite,fread関数について - C言語のfread()やfwrite()の、バイナリ操作関数について質問です。プロトタ... - Yahoo!知恵袋

    fwrite,fread関数について C言語のfread()やfwrite()の、バイナリ操作関数について質問です。 プロトタイプが、 fread(int &バッファ,int 項目のサイズ,int 項目数,FILE *ファイルポインタ) ですよね?変数の型は違うかもしれませんが。 下のプログラムが動作しないので教えて下さい。 #include <stdio.h> #include <process.h> int main(void) { int i; FILE *fp; if((fp=fopen("test.dat","wb"))==NULL) exit(1); i = 100; if((fwrite(&i,sizeof(int),1,fp))==NULL) exit(1); fclose(fp); return 0; } これは、開いたバイナリファイルに100を書き込むプログラムであって

    fwrite,fread関数について - C言語のfread()やfwrite()の、バイナリ操作関数について質問です。プロトタ... - Yahoo!知恵袋
  • コンピューター:C言語講座:マルチスレッドについて

    コンピューター:C言語講座:マルチスレッドについて マルチスレッドの特徴 一般的なサーバプログラムでは、多数のクライアントからの処理をできるだけリアルタイムに処理するために、何らかの形で並列処理を行うことが多いものです。たとえば、データベースサーバで、ある検索処理に時間がかかっている間ほかのクライアントが接続すらできない、という状態ではサーバとして失格でしょう。 並列処理を実現する方法としては、 ・プログラム自体を並列処理可能に記述する ・プロセスをもともと多数起動しておく ・fork()を使って子プロセスを起動するマルチプロセス処理 ・マルチスレッドを使用する などが考えられます。プログラム自体をリアルタイム性を考慮しながら記述するのはなかなか大変で、しかもソースが複雑になりメンテナンス性も問題が多くなりがちです。プロセスをもともと多数起動するのは簡単ですが、クライアントがどのプロセスに

    InoHiro
    InoHiro 2009/06/08
    マルチスレッドとマルチプロセス
  • http://www.google.co.jp/codesearch/p?hl=ja

  • fork(2)とexecve(2)を使ってみた - limitusus’s diary

    OSの授業で扱っていたfork(2)とexecve(2)ですが,実際に使ってみたことがなかったので実際に試しに使ってみました. 別に特別なことをしたかったわけではないので,とりあえずシェルと同じように動いてくれればいいかなーという設計になっています. 暇な時間に大学で作ったのでMac OS Xでしか動作確認をしていません.多分大丈夫だと思いますが,具体的にはerrnoまわりで何かあるかもしれません. ではソースコードをいつものように追記に置いておきます. switchbreakし忘れてたので修正(erマクロ) id:showyou の指摘により実行結果も追記に書きました 動いたからそのままにしてあるけどargv[argc]は必ずNULLって決まってるのかな? ISO Cの規格書に書いてあるとか http://cobito.tea-nifty.com/bleu/2004/02/argvar

    fork(2)とexecve(2)を使ってみた - limitusus’s diary
  • 多桁計算による四則演算 (引数による演算内容の入力)

  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

  • 1