タグ

c_c++に関するpipeheadのブックマーク (128)

  • スコープとエクステントまとめ - t2ru's blog

    ABCLのソースを読んでるうちにスコープとエクステントについてだんだんわかってきたので、自分なりに少しまとめてみた。合ってるかどうかはわからないので、すべてに?がついていると考えてください。 スコープ アクセス可能な場所的範囲 エクステント アクセス可能な時間的範囲 言語 種別 スコープ エクステント コンパイラ・インタプリタでの検索方法(典型例) 実装上の領域(典型例) C ローカル(auto)変数 ブロック内 ブロックに入って時点から出た時点まで 関数の変数宣言リスト スタック C ブロック内のstatic変数 ブロック内 プログラムの開始から終了まで 関数の変数宣言リスト データ領域 C トップレベルのstatic変数 ファイル内 プログラムの開始から終了まで コンパイル単位の変数宣言リスト データ領域 C グローバル変数 ファイル内、extern宣言により別ファイルの変数を参照可

    スコープとエクステントまとめ - t2ru's blog
    pipehead
    pipehead 2009/01/15
    スコープ: アクセス可能な場所的範囲; エクステント: アクセス可能な時間的範囲
  • C言語のポインタ宣言の読み方 | Naofumi Kagami

  • ビットフィールド - Wikipedia

    ビットフィールド (英: bit field) は、プログラミングにおいてブーリアン型のフラグをコンパクトなビットの並びとして格納する手法である。ビットフィールドの格納には、整数型を使用する。個々のフラグは、ビット単位で格納される。通常は、ソースコードで、個別のビットがフラグに対応する意味を付けられた、2の冪乗の定数が定義される。ビット演算の論理積・論理和・否定の組み合わせが、フラグのセット・リセットとテストを行うために使われる。 ビットフィールドはビット配列(英語版)とは異なる。ビット配列は、整数でインデックスを付けられた大きなビットの集合を保存するために使用され、コンピュータ言語でサポートされる整数型よりも大きいことがある。一方、ビットフィールドは典型的にはワードサイズの範囲内であり、各ビットを参照する表記法は数値によるインデックスから独立している。ただし、ビットフィールドを用いるより

  • xorで値のスワップ - oe-roelのカオス落書き帳

    まあ、常識みたいなもんかもしれませんが、今かこうと思った。 void swap(signed &l,signed &r){ l ^= r; // L = R XOR L r ^= l; // R = R XOR (R XOR L) = (R XOR R) XOR L = 0 XOR L = L l ^= r; // L = L XOR R = (R XOR L) XOR (L) = R XOR (L XOR L) = R XOR 0 = R } こうするべきなのか? template <typename T> void swap(T &l,T &r){ l ^= r; r ^= l; l ^= r; } こうか? template <typename T> void swap(T &l,T &r){ l ^= r ^= l ^= r; // 副作用完了点とか未定義とかどうだったっけ } も

    xorで値のスワップ - oe-roelのカオス落書き帳
  • プログラミング/小ネタ集/Unicode対応コーディング - ルーチェ's Homepage

    概要 † このコンテンツは、C/C++言語でWindowsプログラミングをしていて、かつMFCやATLにある CString クラスを使っていない人くらいにしか実益はないかもしれません。 が、内容的に知っておいて損はないことなので書いておきます。 概要としては、 LPTSTR 型や TCHAR 型について知り、NT系(Unicode環境)と9x系(非Unicode環境)のどちらにも最適化できるソースコードを書こうというお話です。 TCHAR 型を見たことがなくても、 LPTSTR 型なら見たことがある人も結構いるでしょう。 初心〜中級のWindowsプログラマは、大抵は LPTSTR 型と LPSTR 型の違いを特に意識せずにコードを書いています。 しかし、この二つの型を混同するのは非常に危険なことです。 まずはこれらの型の定義を説明し、 TCHAR 型を用いることでUnicode対応プロ

  • 任意の底を持つ対数を計算する方法 - プログラマはサイコロを振らない

    多くのプログラミング言語では、任意の底を持つ対数を計算するために一工夫が必要だ。 PHP PHPで任意の底の対数得るのは簡単だ。log関数を用いて次のように書く。第二引数を省略するとネイピア数(自然対数の底)eが底となる。 <?php // 底が2、真数が10の対数値。 $value = log(10.0, 2.0); ?> しかし、このように書ける言語は少ない。 Java JavaではMath.logメソッドもしくはMath.log10メソッドを使う。前者は自然対数(底はネイピア数e)、後者は常用対数(底は10)の値を返す。しかし、任意の底について計算をするようなメソッドは用意されていない。そこで、数学で習った対数の底の変換公式*1を用いて任意の底を持つ対数を計算する。 (対数の底の変換公式) bは任意の底だ。この式を用いれば、任意の底を持つ対数も、自然対数や常用対数を用いて計算すること

    pipehead
    pipehead 2008/08/06
    log() で底が指定できないときは底の変換公式を用いる必要あり
  • new と delete と malloc と free と スタック と ヒープ - すたんだーどっ☆あいおーっ!

    new delete と malloc free メモリ確保解放の方法new deleteとmalloc freeの差 new delete C++から実装 newで確保するとコンストラクタが、deleteで開放するとデストラクタが呼ばれる。 malloc free Cで実装。C++でも使える mallocしてもコンストラクタは呼ばれない。 freeしてもデストラクタは呼ばれない。 共通 ヒープ領域に確保される。 解放を忘れるとメモリリークする。 種類 Cで使えるか C++で使えるか コンストラクタ デストラクタ 領域 解放 new delete 使えない 使える 通る ヒープ 手動 malloc free 使える 使える 通らない ヒープ 手動 スタック と ヒープ メモリ領域スタックとヒープの差 スタック 静的領域。 コンパイル時に決定される。 なので以下のような動的な記述(配列のサイ

    new と delete と malloc と free と スタック と ヒープ - すたんだーどっ☆あいおーっ!
  • リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記

    自分のプロセスのコマンドラインを取得するのは非常に簡単だ。main関数が存在するならargc, argvで取得できるし、そうでなければ、__argv, __argv, (__wargv/__targv)で取得することもできる。また、APIとしては、GetCommandLineというものもある。好んで使う理由は見あたらないけど。 しかしながら、リモートプロセスのコマンドラインとなると、とたんに敷居が高くなる。プロセスハンドルを持っていても、GetRemoteCommandLineというAPIは見あたらないのでどうしようもない。となると、考えられる方法としては、 CreateRemoteThreadなどで相手プロセス内でGetCommandLineを呼び出す 相手のプロセスのメモリを直接読み込む という2つのうちのいずれかを選択することになる。一つ目の案は、大げさすぎるのと、相手プロセスに送り

    リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記
  • C++0xの完全なドラフトが9月に出ること、および、Iotaについて

    yey! : Trip Report: June 2008 ISO C++ Standards Meeting « Sutter’s Mill しかし、iotaはどういう語源なんだろうと思って調べてみた。何しろ、ノンネイティブな私に乗っては、意味がさっぱり分からない。iota(v.begin(), v.end(), 1)などと書かれていても、さっぱり意味が分からない。 アルゴリズム、iotaはとても簡単である。意味も簡単であれば、実装も簡単。 template < typename Iter, typename Value > void iota( Iter first, Iter last, Value value) { for ( ; first != last ; ++value, ++first ) { *first = value ; } } であるから、先ほどの例、iota(v

  • ZeroMemory を使うと CRT とリンクされる - IKB: 雑記帳

    ZeroMemory や CopyMemory などの Win32 API は CRT (C Runtime Library) の呼び出しに置き換えられる模様です。 // Winbase.h より抜粋 #define MoveMemory RtlMoveMemory #define CopyMemory RtlCopyMemory #define FillMemory RtlFillMemory #define ZeroMemory RtlZeroMemory// Winnt.h より抜粋 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length)) #define RtlCopyMemory(Destination,Source,Length) memcpy((Desti

    ZeroMemory を使うと CRT とリンクされる - IKB: 雑記帳
  • Source of Nothingness - memo : xyzzy lisp FFI

    いつかちゃんとまとめたい。 基 関連する関数・マクロの定義は $XYZZY/lisp/foreign.l foreign パッケージで定義 サンプルは $XYZZY/lisp/wip/ 以下 データ型関連 int -> c:int, double -> c:double, ... $XYZZY/lisp/foreign.l, $XYZZY/lisp/wip/winapi.l を参照 ポインタ型は「(c:char *)」というようなリストの形で表現 C の構造体は c:define-c-struct で定義 C の関数を呼ぶ関連 c:define-dll-entry で C 関数のインターフェースを作る c:define-dll-entry RETURN-TYPE NAME (&rest ARGS) DLL-NAME &optional EXPORT-NAME RETURN-TYPE 関数

  • 覚書 (__argc, __argv, __wargv) - cunatanの日記

    win32 の WinMain で main みたいに argc と argv を使いたかった。コンパイラが dmc なら stdlib.h をインクルードして __argc と __argv か __wargv を呼び出せば目標達成。下は stdlib.h からの抜粋。 #ifdef _DLL extern int * __CLIB __p___argc(void); extern char *** __CLIB __p___argv(void); extern wchar_t *** __CLIB __p___wargv(void); #define __argc (*__p___argc()) #define __argv (*__p___argv()) #define __wargv (*__p___wargv()) #else

    覚書 (__argc, __argv, __wargv) - cunatanの日記
  • size_t ‐ 通信用語の基礎知識

    C99(ISO/IEC 9899:1999)においては、ある変数をsize_t型で宣言するためには次のいずれかの標準ヘッダーを読み込む必要があるとしている。 stddef.h stdio.h stdlib.h string.h time.h wchar.h 実際の定義はstddef.hの中にあることが多い(実装による)。他のヘッダーファイルは、間接的にstddef.hをincludeしている。 C++でも、ヘッダーのincludeが必要で、その仕様はCと変わらない。 C++の場合は先頭にcを付けて後尾に.hを付けない、<cstddef>を使用する。両者の違いは名前空間(namespace)である。 cstddef cstdio cstdlib cstring ctime cwchar 理論上は、この何れかをincludeすれば、size_tがtypedefされる。 規格によれば、JIS X

  • 畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket log

    つーか、fold の弱点として、言語によって引数の順番がまちまちで、 正直憶えきれないってのがあるんだよな。誰か対応表とか作ってくれんもんか。 jijixi's diary - fold, map, for-each この中から一つ選ぶとしたらどれ? 確かにいろいろとややこしいのでまとめてみました。 いくつかの言語について大雑把に表にすると次のような感じ。 言語 関数 Haskell, OCaml, Scheme, Erlang foldl* f init items C++ accumulate(begin, end, init, f) Ruby*, JavaScript items.inject(init, f) Python, Perl* reduce(f, items [, init]) 言語 畳み込む二項演算 Scheme(SRFI)*, Erlang f(item, acc)

    畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket log
  • ->、*、&、[]演算子って奥深いっすよ

    ホーム < ゲームつくろー! < C++踏み込み編 < ->、*、&、[]演算子って奥深い その1 ->、*、&、[]演算子って奥深い 「->」「*」「&」そして「[ ]」演算子は、ポインタ関連を扱う演算子です。これらの関係を曖昧に捕らえていると、関数の引数や戻り値、演算子のオーバーロードなどで大混乱を起こします。私は・・・起こしました(笑)。そこで、これら演算子の振る舞いをまとめてみました。頭で箱と矢印を描きながらご覧下さい。 ① メンバ選択演算子「->」は右辺値が大事 「->」これはメンバ選択演算子というのだそうです(MSDN)。アロー演算子と呼ぶ人もいます。これは「後置演算子」、つまり演算子の左側の値(左辺値)を使います。 メンバ選択演算子の左辺値に来ることが出来るのは通常「クラスのオブジェクトへのポインタ」です(「通常」じゃない場合については後述)。一般的なポインタ変数(int*型

    pipehead
    pipehead 2007/10/20
    メンバ選択演算子, 間接演算子, アドレス演算子, 配列参照演算子
  • VC++でMFCを使わないで新規Excelファイルを起動する

  • 参照とポインタ

    この文章はプログラマでもプログラミング言語の専門家でもないただのプログラミング好きの私が適当に書きつづったものです。よってこの文章には正しい箇所もあるでしょうが、間違っている箇所もかなりあるはずです。ご指摘いただけたらと思います。また、この文章を読んでも内容を鵜呑みにしないでください。鵜呑みにした結果何か起きても知りません。 "諸悪の根元"-ポインタ Cの特徴の1つとして、また初心者が必ずつまずく(*)とされる難所としてポインタがあげられるわけだが、ポインタはどうも最新流行のプログラミング手法の中では諸悪の根元として忌み嫌われているようだ。 (*) 自慢するわけではないのだが、私は別にポインタでつまずいた記憶はない。もちろん、効果的な使い方などはその後いろいろなコードを読んでいく中で身に付いていったわけだが。 ポインタは確かに諸刃の剣である。非常に便利な反面、危険でもある。例えば次のような

    pipehead
    pipehead 2007/08/28
    ポインタと参照の使い分け
  • 剰余を使わずにFizzBuzz - おびなたん☆

    新幹線の中の暇な時間を使ってやってみた。 まず剰余を使わない方法 最小公倍数と整数論における法の理屈が分かっていれば、3と5の最小公倍数の15周期で"Fizz", "Buzz", "FizzBuzz"のパターンが現れることがすぐに理解できる。ちうことで、"Fizz", "Buzz", "FizzBuzz", NULLからなるの長さ15の配列を用意して、それを順繰りにトレースして行けばいい。 const char* fizz = "Fizz"; const char* buzz = "Buzz"; const char* fibuzz = "FizzBuzz"; const char* fb[] = { NULL, NULL, fizz, NULL, buzz, fizz, NULL, NULL, fizz, buzz, NULL, fizz, NULL, NULL, fibuzz, };

    剰余を使わずにFizzBuzz - おびなたん☆
  • sizeof - Wikipedia

    主にCとC++において、sizeofは、データ型の大きさを求める単項の演算子である。sizeofは原則としてコンパイル時計算される演算子で、式もしくは括弧でくくった型指定子を与えるとその大きさをバイト単位で返す。これは組み込みの数値型(整数型や浮動小数点数型)、列挙型、ポインタ型、利用者定義の複合データ型(構造体、共用体、C++のクラス)まで、ほぼ全てのデータ型に対して使用できる。 必要性[編集] 多くのプログラムで、データ型の大きさがわかると便利な状況がある。最もよくある例としては標準Cライブラリのmallocなどによる動的メモリ確保が挙げられる。組込型の大きさは処理系定義となっており、厳密な大きさはsizeof (char)が1であることを除いて標準に定められていない。次の例では10個の要素を持つint型の配列を格納するのに十分なメモリを確保しようとしている。(処理系に依存したコードを

    pipehead
    pipehead 2007/03/29
    > sizeofは原則としてコンパイル時計算される演算子で、式もしくは括弧でくくった型指定子を与えるとその大きさをバイト単位で返す。
  • HRESULT型とは?(UsefullCode.net)

    UsefullCode.net Visual Studio 2005/2008/2010やandroid SDK/NDKでの開発者向けに便利なソースコードを提供 This site provide you with useful source codes under 'USEFULLCODE license'. HRESULTとはlong型の数値だ。この型はCOMインターフェース関連の関数の戻り値として利用されることが多い。 関数の戻り値として使われることの多いBOOL型が成功を意味するのは「1」(=TRUE)で失敗が「0」(=FALSE)なのと似ている。 大きな違いはBOOL型がTRUEとFALSEの2値しか取らないのに対して、HRESULT型では0x00000000~0xFFFFFFFFまでの多くの値が利用される。そのためBOOL型では失敗の原因を取得するためにGetLastError