タグ

C言語に関するhon53のブックマーク (19)

  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • インポートアドレステーブルと API フック - Web/DB プログラミング徹底解説

    概要 ある実行可能ファイルから、他の実行可能ファイル (DLL) にある関数を呼び出すために、実行可能ファイルのヘッダー情報の中のインポートセクションという場所に記録されている情報を使います。 インポートセクションには、「この EXE (または DLL) は foo.dll の Bar() 関数を呼び出しますよ。アドレスはここです。」 というような情報が書いてあります。この資料ではその仕組み、特に実際の関数のアドレ スが記載されているインポートアドレステーブルの仕組みを説明します。最後にこれを活用する例として、MessageBox API をフックして自前の関数を呼び出してみます。 インポート セクションと IAT いわゆる普通の実行ファイル (EXE) は PE (Portable Executable) 形式と呼ばれるフォーマットです。その詳細は別の回でご説明したいと思いますが、今回の

    インポートアドレステーブルと API フック - Web/DB プログラミング徹底解説
    hon53
    hon53 2009/01/06
    IATとAPIフック
  • CUnitによるテスト駆動開発

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

    CUnitによるテスト駆動開発
    hon53
    hon53 2009/01/02
  • はじめてのカーネル・ソース---目次:ITpro

    なかなかハードルが高く,多くの人が踏み出せないでいるカーネルのソース・コードの読解。連載では,今までカーネル・ソースなんて見たことがないという人に,読みこなすコツをお教えします。 カーネルのコンパイル方法については,関連記事「やってみると意外に簡単!? Linuxカーネル・コンパイル入門」をお読みください。 また,カーネル・パラメータの項目については,関連記事「「Linuxカーネルの設定パラメータ」」で公開しています。 第1回 どうしたら読めるようになるのか 第2回 C言語とライブラリの初歩 第3回 カーネル・ソース内のシステム・コールを確認する 第4回 カーネルが構造体を好むワケ 第5回 デバイス・ドライバとモジュール 第6回 構造体に「関数」を登録する 第7回 ネットワーク処理はモジュール処理と上下が逆 第8回 データに意味付けするキャスティング手法 第9回 機能拡張でよく使われる共

    はじめてのカーネル・ソース---目次:ITpro
  • Loading...

  • システムコール概論

    プロセス プロセスについて考える プロセスの選択的なkillコマンド・zap システムコール 低レベル入出力 ファイル指定子 readとwrite 標準入出力と低レベル入出力 標準入出力と低レベル入出力---読みと書き 眠るシステムコール sleep 標準入出力以外のファイルのオープンとクローズ ファイルの作成とオープン ファイルを作成する。 creat システムコール ファイルのオープン---単純な形式 creat と open を使ったcopyのプログラム ファイルのオープン・オプションフラグ 前回のmycpの問題 オプションフラグでのファイルのオープン --- 様々なオープン mycp2 --- オーバーライトチェックの試作品 mycp3 --- UNIXの精神に反する親切なコピーツール オプションフラグの別の利用の仕方 C言語の復習 関数 function 制御 If-Else w

  • Geekなぺーじ : Mac OS Xネットワークプログラミング

    Mac OS Xでのネットワークプログラミングを勉強しながら、少しずつ公開していくコーナー。 コードを書く前の準備 まず、gccを使える状態にしないといけません。 Mac OS Xを普通にインストールしただけでは開発環境は入りません。 Xcodeを含むMac OS X開発環境はOS DVDなどに入っています。 次に、エディタが必要になります。 標準開発環境であるXcodeを利用して書くことができます。 一方で、UNIXやLinuxなどで一般的なエディタであるmule、emacs、xemacsなどを利用することも可能です。 個人的にはviが好きです。 Cocoa ファイル単体をそのままコピペしてgccでコンパイルできるCUIとして書いているので多少特殊な書き方をしている気がします。 GUIを使う場合はNSRunLoopではなく、NSApplicationMainを使ったりするのでご注意下さい

  • IPAセキュリティ

    この章では,C 言語および C++ 言語のプログラミングにおいて起こりがちな,セキュリティ脆弱性につながりかねない問題を紹介し,それらに対処する方法について説明しています。

  • C言語: 実行時間測定の方法

    C言語において実行時間を測定する為の方法はいくつかある。gettimeofday, clock, getrusage, timesを利用する方法である。ここではこれらの方法について検証してみる。これは2005/12/30時点での情報であり、古い亊が考えられるので注意して頂きたい。さらに、内容のほとんどはmanを移しただけなので、正確な情報を得るためにそれぞれの関数のmanを見ることを強く推奨する。 System: Linux 2.6.12 glibc: glibc 2.3.5-1ubuntu12 gettimeofdayを使用する方法 通常はこの関数を使用するのをお勧めする。 gettimeofdayはSVr4, BSD 4.3準拠である。返り値の型はsys/time.hに定義されるstruct timevalで有る。

  • 浮動小数点数型と誤差

    有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000

  • コマンドライン引数の取得とgetopt - ファイヤープロジェクト

    コマンドライン引数を取得する方法と,それを簡単に行なうライブラリ関数getoptについて. 引数の取得 とりあえず引数を取ってみる getopt いろんなコマンドはいろんな引数をとる. int main(int argc,char *argv[]) のargcが引数の数でargvが引数の値である.0番目の引数の値はプログラム自身の名前である. とりあえず引数を取ってみる次のプログラムは全ての引数を表示するだけのものである. includeint main(int argc,char *argv[]) { int i; for(i=0;i<argc;i++){ fprintf(stdout,”arg %d is %s\n”,i,argv[i]); } exit(0); } これを実行すると以下の感じになる. $> ./getArgs hoge fuga arg 0 is ./getArgs

  • GrapeCity

    帳票・レポート 日仕様の帳票開発に必要な機能を搭載したコンポーネント ActiveReports for .NET ActiveReportsJS 表計算・グリッド Excel風のビューと表計算機能を実現するUIコンポーネント SPREAD for Windows Forms SPREAD for ASP.NET SPREAD for WPF SpreadJS 入力支援 快適な入力を実現する日仕様入力コンポーネントセット InputManPlus for Windows Forms InputManPlus for ASP.NET InputManPlus for WPF InputManJS 多段明細 1レコード複数行&日付表示に 最適なグリッドコンポーネント MultiRowPlus for Windows Forms 戻る コンポーネントセット Visual Studioで利用す

    GrapeCity
  • 後置き++演算子の優先順位に関して - BIGLOBEなんでも相談室

  • Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center

    All Microsoft Global Microsoft 365 Teams Copilot Windows Surface Xbox Deals Small Business Support Software Windows Apps AI Outlook OneDrive Microsoft Teams OneNote Microsoft Edge Skype PCs & Devices Computers Shop Xbox Accessories VR & mixed reality Certified Refurbished Trade-in for cash Entertainment Xbox Game Pass Ultimate PC Game Pass Xbox games PC and Windows games Movies & TV Business Micro

  • ポインタの配列?それとも配列へのポインタ?(複雑な変数宣言)

    ポインタの配列?それとも配列へのポインタ? (複雑な変数宣言) よくある勘違いで以下のように配列とポインタが組み合わさった場合、変数fooとbarは何を表すのか混乱する場合があります。 char *foo[100]; char (*bar)[100]; この勘違いは演算子の優先順位を理解していない場合に発生します。更にやっかいなことに演算子*が左から右へ結合するのに対し、演算子[]が右から左へ結合するので特に初心者にはよけい判りづらくなります。 C/C++言語において、演算子[]は演算子*より高いので、コンパイラは[]を先に解釈します。 つまり、"char *foo[100]"の場合、この宣言の解釈順は以下の通りです。 宣言のうち、最も優先順位が高いのは[]である。つまり、変数fooは「何か」が100個ある配列である。 宣言から[100]を除外する。 宣言の残りは"char* foo"

  • 苦しんで覚えるC言語

    [全ページ目次] 苦しんで覚えるC言語(苦C)は、初心者を対象としたC言語入門サイトです。 C言語の基機能を体系立てて解説しており、市販書籍と同等以上の完成度です。 初めての人は 前書き から読み始めて下さい。 キーボードの矢印キーか、右下の進む>で次のページに移動します。 コンパイラ入手:基礎編:応用編:標準ライブラリ 全文検索:ダウンロード版:苦Cアンケート:ミス報告:掲示板で質問 [  更新情報  ] 01月22日 : Visual C++ 2005 Express Edition 10月30日 : Borland C++ BuilderX Personal 10月07日 : 掲示板に寄せられたQ&A項目を作成 03月10日 : ドラッグへの対応 ※ミス報告で報告されたミスの修正は約100回以上行っています。 苦Cについて 苦Cの使用法(特に読まなくても良い

  • 1