タグ

Cとプログラムに関するiwwのブックマーク (56)

  • C で関数に * や & を付けられる件の説明 - Qiita

    規格として C11 (n1570) を参照する。 注意: 途中に入れた図が崩れるようなら、半角・全角比が 1:2 になるようなフォントを使って閲覧してください。 現象 wandbox で実行 ソース: ( &printf)(" &printf = %p\n", &printf); printf (" printf = %p\n", printf); ( *printf)(" *printf = %p\n", *printf); ( **printf)(" **printf = %p\n", **printf); (***printf)("***printf = %p\n", ***printf); この現象を解説する。 関数呼び出し まず、関数呼び出しについての規定を見る。 The expression that denotes the called function shall have

    C で関数に * や & を付けられる件の説明 - Qiita
  • C/C++プログラム実行時の関数をトレースする方法

    C/C++プログラム実行時の関数をトレースする方法を紹介します。 1.はじめに C/C++プログラムで実行時の関数をトレースする場合、printf()などを埋め込んでログに出力することが少なくないと思います。 が、その方法ではログ出力するためにプログラムに手を入れなくてはならなず、非効率です。 また規模の大きなプログラムでは現実的な解決方法ではありません。 printf()を埋め込まずにトレースできないか、方法を探していたところ、標準でそのような機能があることをみつけました。 仕組みは、gccでトレースしたいプログラムファイルのコンパイル時に、コンパイルオプション"-finstrument-functions"を付与することで、関数の実行開始時および復帰時に下記のフック関数を呼び出せるようになります。 void __cyg_profile_func_enter(void* func, vo

    C/C++プログラム実行時の関数をトレースする方法
  • C言語でconstなオブジェクトが書き換えられることがある話

    先に注意事項ですが、今回の話はC言語ソースのコンパイル結果、つまり「処理系での実現方法」の話であって、C言語そのものの決まりではありません。 ※C言語としての話と、コンパイル後のバイナリレベルの話を混同する人が山のようにいるので念のため angel (as ㌵㌤の) @angel_p_57 なんかふと思い立ってC言語コードのコンパイル結果を見てみたんだけど、不思議に思ったことが。 const修飾したオブジェクトって実質読み取り専用だから、メモリ上に置かれるとしたら rodata 等の書き込み不可領域になるんだけど。ところが auto変数 ( 要はレキシカルな変数 ) はそうならないようだ。 2023-07-29 21:12:41 angel (as ㌵㌤の) @angel_p_57 例えば static const char str[] = "…"; としてstaticなconst文字

    C言語でconstなオブジェクトが書き換えられることがある話
  • A simple defer feature for C

    Introduction Many implementations provide extensions that allow programmers to attach a block of cleanup code to another block or function such that this cleanup code is executed unconditionally when execution of the block is terminated. These existing extensions don’t have a unified API, some use pseudo-function calls, some compiler specific attributes and yet another a try/finally notion. In a f

  • libgit2の内部データ構造: strmap - Qiita

    libgit2の内部ではハッシュテーブルが使われていたりしますが、C言語標準ライブラリにはハッシュテーブルはありません。ここで公開されている外部のライブラリkhash.hをラップして作られています。コードリーディングメモです。 khashとは何か MITライセンスですが、著者はプロフィールを隠しています。 このブログはanonymousなブログだ ... 俺は完璧主義者だ。もし、読者がこのブログを書いている私を知っているなら、 私は出来る限りすべてを完璧にし続けたいと思うだろう。 それは私を神経質にして、何を書くにしても疲れ果ててしまうだろう。 もし読者が私が誰かを知らないのであれば、自分を解放することができて、 心が赴くままに書き続けられるだろう。 (意訳) こういう厨二病な感じ、嫌いじゃないです。とはいえ、ちょっと古いですがここのエントリーに書かれているベンチマークの結果を見ると、トッ

    libgit2の内部データ構造: strmap - Qiita
  • 【linux】lsより高速にファイルの一覧を出そうとしてみた at softelメモ

    問題 ファイルの一覧を出すコマンドって ls しかないんですか。 答え ls は、readdir と stat をしているから遅いんだという話を聞いて、 readdirを使ってファイルの一覧を出力するプログラムをCで書いてみた。 やることは意外と簡単。 1、Cでプログラムを書く $ vi readdir.c #include <stdlib.h> #include <stdio.h> #include <string.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=ope

    【linux】lsより高速にファイルの一覧を出そうとしてみた at softelメモ
  • C でヒアドキュメントごっこ

    C 言語 マクロ講座 # ## 編に触発されて、もうすこし悪戯を。(例によってcygwin+gcc) htmlでは、” (ダブルクォート)が多用されているので、cgiプログラムでは、文字列として定義するときにエスケープする必要があり面倒です。<h1 id=”title”>hello</h1> は、”<h1 id=\”title\”>hello</h1>” として定義しなければなりません。このおかげで、Starbug1のソースは大変なことになってます。普通ならテンプレートエンジン書け!ってことになるんでしょうが、Starbug1の性質上余分なことはしたくないので、現在htmlをエスケープしながら直書きしてます。 プリプロセッサで処理する方式で、エスケープせずにhtmlを記述できるようになると非常に嬉しいので、# を使ってヒアドキュメント風なものを試してみました。最初試したのは、↓のような感じ

    iww
    iww 2023/02/18
    実用はさておき面白い
  • 【Linux】100万ファイルくらいあるディレクトリのファイルのリストを高速に表示したい - 地方エンジニアの学習日記

    概要 ファイル名のリストだけ高速に欲しいみたいな場合に大量にファイルがあるディレクトリでlsを打って返ってこないみたいなのが地味にストレスになったりするので高速に済ませる手段が無いかを調べてみた。 1ディレクトリに100万ファイル程度 計測前にecho 3 > /proc/sys/vm/drop_cachesを都度実行し10回程度計測 計測 ls -l めっちゃ遅い real 0m24.052s user 0m5.668s sys 0m8.071s straceをしてみるとこんな感じ。-lをつけるとメタデータを取りに行くのでこれが遅いらしい。sysが長い % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 44.6

    【Linux】100万ファイルくらいあるディレクトリのファイルのリストを高速に表示したい - 地方エンジニアの学習日記
  • bashの組込みコマンド自作によるスクリプトの高速化 - 覚書

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - 覚書
  • clocコマンドで指定したディレクトリ配下のソースコードの種類とステップ数・カウント数や空行の数などを求める | 俺的備忘録 〜なんかいろいろ〜

    特定のディレクトリ配下にあるファイルの行数とかを再帰的に取得する場合、wcコマンドが利用される場合が多いだろう。 wc -l $(find /PATH -type f) blacknon@BS-PUB-UBUNTU-01:~/test_dir$ ls -la 合計 152 drwxrwxr-x 12 blacknon blacknon 4096 2月 25 16:42 . drwxr-xr-x 15 blacknon blacknon 4096 2月 25 16:39 .. drwxrwxr-x 2 blacknon blacknon 4096 2月 25 16:41 00 drwxrwxr-x 2 blacknon blacknon 4096 2月 25 16:41 10 drwxrwxr-x 2 blacknon blacknon 4096 2月 25 16:41 20 drwxrwx

    iww
    iww 2022/09/27
    いろんな言語に対応してるステップカウントツール
  • Man page of FGETC

  • C/C++: 16進数文字列をバイト列に変換する|TechRacho by BPS株式会社

    16進数の文字列を、バイト列に変換するコードです。 再利用できそうなので貼っておきます。 void BytesFromHexString(unsigned char *data, const char *string) { printf("string:%s\n", string); int len = (int)strlen(string); for (int i=0; i<len; i+=2) { unsigned int x; sscanf((char *)(string + i), "%02x", &x); data[i/2] = x; } } (おまけ)バイト列を、16進数文字列でログ出力 void printh(unsigned char* data, unsigned int len) { for (int i=0; i<len; i++) { printf("%02x",

    C/C++: 16進数文字列をバイト列に変換する|TechRacho by BPS株式会社
  • 1分で実行できる?インストール不要、C言語向けGoogleTestサンプル for Linux - Qiita

    先にタイトルに誇大な表現があることを謝っておきます。。。 http://qiita.com/igayu/items/eaa63d017e0590504999 でC開発者向けのGoogleTestの良いところを述べたつもりですが、じゃあ次は実際に動かしてみようよ、って時の手ごろなサンプルを用意してみました。GoogleTest自体がサンプルコードも提供しているみたいですが、慣れてないとビルド方法とか、英語だから読む気しない、って人もいます。それくらい常識、勉強しなさい、と切り捨てると仕事は回りません。せっかくGoogleTest、便利そうだね、って思ってくれた人にはもう少し背中を押してあげます。 ここで紹介するサンプルは以下の前提で書いています。 ・C言語開発者向けということでC++の文法には極力触れない ・Linux gccベース(私はWindows7にvmwareでCentOS6.7を仮

    1分で実行できる?インストール不要、C言語向けGoogleTestサンプル for Linux - Qiita
  • 日本のコンピュータ情報 : 富士通

    コンビニに行けば常に商品がずらりと並び、ECで買った商品は翌日届きます。消費者の利便性を優先して設計されてきたサプライチェーンは、過剰生産による資源ロスや、仕入れにかかる不均衡など、その綻びがいま深刻化しています。企業や消費者の共感を得ながら、サプライチェーンを再設計する方法を模索して、顧客体験設計の最前線を知るビービットの藤井保文氏と富士通 SVP 神 俊一が対談します。

    日本のコンピュータ情報 : 富士通
  • オブジェクト指向プログラムでgetter/setterメソッドを使わなければならない10の理由

    オブジェクト指向プログラムで getter/setterメソッドを使わなければならない 10の理由 福盛 秀雄 fukumori at m.ieice.org JavaC++などのオブジェクト指向言語でプログラムを書いているときに、単純なメンバ変数を参照したり操作するために anObject.getX() [以後これをgetterメソッドと呼ぶ] とか anotherObject.setY(y) [以後これをsetterメソッドと呼ぶ] と書くのはなぜだろうと思ったことはないだろうか? int型の変数ひとつを操作するのになぜわざわざメソッドを定義するのだろう? 単純に代入を使えばいいじゃないか? この文章はそんなあなた(かつての僕も含む)が、getter/setterメソッドを使うべきである理由についてまとめたものである。 ということで早速論へ。 1. クラス内部のデータ表現を変えた場

    iww
    iww 2019/06/17
    列挙された理由がそのまま、今となってはgetter/setterを積極的に使用しなくても良い・しない方が良い理由になっている
  • 静的コード解析 - Wikipedia

    静的コード解析 (せいてきコードかいせき、static code analysis) または静的プログラム解析 (static program analysis) とは、コンピュータのソフトウェアの解析手法の一種であり、実行ファイルを実行することなく解析を行うこと。逆にソフトウェアを実行して行う解析を動的プログラム解析と呼ぶ[1]。静的コード解析はソースコードに対して行われることが多いが、少数ながらオブジェクトコードに対して行う場合もある。また、この用語は以下に列挙するツールを使用した解析を意味することが多い。人間が行う作業はインスペクション、コードレビューなどと呼ぶ。日語では静的コード分析とも訳される[2]。 概要[編集] ツールが行う静的コード解析の洗練度は、個々の文や宣言だけを検証するものから、プログラム全体を解析するものまで様々である。解析結果の利用も様々で、Lintのように単に

  • - 株式会社エスロジカル - 技術ドキュメント UNIX の C言語:iconv()で文字コード変換

    技術ドキュメント目次 -> UNIX の C言語 -> iconv()で文字コード変換 技術ドキュメントは、2002~2004年頃に作成したものが多いです。 内容が古くなっていることもあるかと思いますが、ご了承ください。 【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。 ◆ iconv()で文字コード変換 iconv() 関数を用いるとことで、 UNIXのC言語のプログラム内から文字コードの変換を行うことができます。 ◆ iconv()サンプルプログラム 文字列をEUCからSJISに変換する簡単なサンプルを次に記載しますので、 よろしければ参考にされてください。 ※RedHat Linux 7.3 と FreeBSD 5.3 でコンパイルが通ることを確認しました。 ただし、FreeBSD ではデフォルトで iconv が入っていないことも多い

    iww
    iww 2017/12/15
    inbytesleftとoutbytesleftが同じ変数を指してるけどいいのか? ダメなんじゃないか?
  • 文字列リテラルでの初期化 (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のブログ
    iww
    iww 2017/07/07
    構造体または配列の先頭の要素を0に設定し、残りの部分を0で埋める。 という意味になるので、 {} だけの方が行儀が良いと思う
  • 今更volatile(なポインタ)ではまるなんて - ctrl-shift-moccos

    AVR Studio上で、割り込みベクタで処理されるリングバッファの状態(ポインタの指す先)をループ条件にしたコードを書いたんですよ。以下のようなイメージ。 while (ポインタ同士の比較) { } これが一向にループを抜けてこない。ビルド時に生成される、アセンブリ言語が混ぜ込まれたファイル(*.lss)を見ると、条件判定の前まで戻ってくるループになっていませんでした。最初に条件判定して、するりと抜けられなければ無限ループに飛びます。 (略:このへんにポインタ比較するコードがある) 39a: 14 f1 brlt .+68 ; 0x3e0 (中略) 3e0: ff cf rjmp .-2 ; 0x3e0 :飛び先 volatile unsigned char *hoge のような宣言をしているポインタです。いきなりAVR StudioのCコンパイラを疑ってしまいましたが、同様のコードをC

    今更volatile(なポインタ)ではまるなんて - ctrl-shift-moccos
    iww
    iww 2016/08/18
    『volatile int * hoge1; // ポインタの参照先がvolatile』
  • Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 最近は結構 matsuu さんのブクマから見つけて記事を書いてたけど今日はそうじゃない所からご紹介。 Jansson — C library for working w

    Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い