MW211 EXIT

devlog
C/C++/最後のカンマ
2012年07月21日
JSONでは最後に余計なカンマをつけると怒られてしまうが、
C/C++の場合は以下の通りらしい。
┌──────┬─────────┬──────────┬──────────┐
│            │                  │         ○         │         ×         │
├──────┼─────────┼──────────┼──────────┤
│配列初期化子│int  a = {1,2,3,};│C90、C99            │                    │
│            │                  │C++98、C++03、C++11 │                    │
├──────┼─────────┼──────────┼──────────┤
│列挙子      │enum a = {1,2,3,};│C99                 │C90                 │
│            │                  │C++11(C++0x)        │C++98、C++03        │
└──────┴─────────┴──────────┴──────────┘
enumの場合の最後のカンマは、C++03では正式には不正だったが、
あまり気づかなかったらしい(コンパイルで許容されてた?)
分類:C/C++
C/C++/配列数の取得
2012年07月20日
┌──────────────────────────────────────┐
│count($array);                                                              │
└──────────────────────────────────────┘
PHPだと配列$arrayの配列数を求めるのに、count()が使える。

では、C/C++では?

そんな便利な関数はありません。

ってな訳で、以下のようなマクロで代用しましょう。
┌──────────────────────────────────────┐
│#define count(array)  (sizeof(array) / sizeof(array[0]))                    │
└──────────────────────────────────────┘
分類:C/C++
JavaScript/【未解決】自身の関数名
2012年07月19日
IE以外なら「arguments.callee.name」で取得できる。

統一的な取得方法ってないものか。。。
分類:JavaScript、【未解決】
JavaScript/関数の中身
2012年07月18日
「arguments.callee.toString()」ってすると、
その関数のソースの中身が取得できるみたい。
分類:JavaScript
PHP/parse_ini_fileの注意点(2)
2012年07月17日
PHPでは「parse_ini_file()」を使ってiniファイルを解析したりするが、
この場合、以下の注意が必要。

iniファイルでは「?{}|&~![()^"」が使えないらしい。
分類:PHP
PHP/parse_ini_fileの注意点(1)
2012年07月16日
PHPでは「parse_ini_file()」を使ってiniファイルを解析したりするが、
この場合、以下の注意が必要。

・以下の文字列は「文字列""」と認識される(大文字のみ、大文字混在も含む)
    false、no、none、null、off
・以下の文字列は「文字列"1"」と認識されるもの(大文字のみ、大文字混在も含む)
    on、true、yes

なお、「one」みたいに文字列の一部の場合は「1e」とかにはならないから大丈夫。

ということで、「FLAG=true」とか指定した場合には、
「配列['セクション']['FLAG']="1"」みたいな感じになる。

ただし、「if (配列['セクション']['FLAG']) {…} else {…}」(…①)って
判定してしまえば、trueの場合は真の処理を、falseの場合は偽の処理をしてくれる。

間違って「if (配列['セクション']['FLAG'] === 'true') {…」とかやると
ハマってしまう(trueを指定しても偽になってしまう)。

ただ、①の場合、「hoge」とかでも(何らかの文字があれば)、真になってしまうので、
trueかfalseのどちらかを厳密に指定するように推奨した方がよいかも。
(ちなみに指定なし(FLAG=)だと偽になる)
分類:PHP
PHP/定義済み定数一覧
2012年07月15日
┌──────────────────────────────────────┐
│print_r(get_defined_constants());                                           │
└──────────────────────────────────────┘
お、多い…。

ちょっと乱暴すぎるのでソートする場合は以下のような感じで。
┌──────────────────────────────────────┐
│$define = get_defined_constants();                                          │
│ksort($define);                                                             │
│foreach ($define as $key => $value) {                                       │
│  printf("%s = %s\n", $key, $value);                                        │
│}                                                                           │
└──────────────────────────────────────┘
でも、お、多い。。。
分類:PHP
VC++/ファイルの最終行を検出する方法
2012年07月14日
C言語であれば以下のような感じか。
┌──────────────────────────────────────┐
│FILE  fp;                                                                   │
├──────────────────────────────────────┤
│while (fgets(line, sizeof(line), fp) != NULL) {                             │
│}                                                                           │
│if (ferror(fp)) {                                                           │
│    エラー;                                                                 │
│}                                                                           │
└──────────────────────────────────────┘
ファイルの最後になったらlineを書き換えないので、最後のlineが残っている。

MFCであれば、以下のような感じ。
┌──────────────────────────────────────┐
│CStdioFile  ファイル;                                                       │
├──────────────────────────────────────┤
│CString     line    = "";                                                   │
│CString     newLine = "";                                                   │
│while (ファイル.ReadString(newLine)) {                                      │
│    line = newLine;                                                         │
│}                                                                           │
└──────────────────────────────────────┘
但し、こちらはline(newLine)を書き換えてしまうため、
ワンクッション必要みたい。
VC++/CArrayについて
2012年07月13日
┌──────────────────────────────────────┐
│CArray a;                                                                   │
└──────────────────────────────────────┘
CArrayにて、以下は同じ。(三番目の項目をみている)
┌──────────────────────────────────────┐
│a[3]                                                                        │
├──────────────────────────────────────┤
│a.GetAt(3)                                                                  │
└──────────────────────────────────────┘
分類:C/C++
C言語/グローバル変数の定義
2012年07月12日
以下の組み合わせなら、OK。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │int z;                                                                │
├──┼───────────────────────────────────┤
│b.c │#include "b.h";                                                       │
└──┴───────────────────────────────────┘

以下の組み合わせだと、二重定義でNG。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │int z;                                                                │
└──┴───────────────────────────────────┘

以下も、二重定義でNG。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │#include "a.h";                                                       │
└──┴───────────────────────────────────┘

以下ならOK。
┌──┬───────────────────────────────────┐
│a.h │int z;                                                                │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │extern int z;                                                         │
└──┴───────────────────────────────────┘

以下だと、実体がなくなってしまうのでNG。
┌──┬───────────────────────────────────┐
│a.h │extern int z;                                                         │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
├──┼───────────────────────────────────┤
│b.h │#include "a.h";                                                       │
└──┴───────────────────────────────────┘

以下とかもありがちなのか?
┌──┬───────────────────────────────────┐
│a.h │                                                                      │
├──┼───────────────────────────────────┤
│a.c │#include "a.h";                                                       │
│    │int z;                                                                │
├──┼───────────────────────────────────┤
│b.h │extern int z;                                                         │
├──┼───────────────────────────────────┤
│b.c │#include "a.h";                                                       │
│    │#include "b.h";                                                       │
└──┴───────────────────────────────────┘

よくわからん。そのうちちゃんと整理します。(上記はあまり信用しないでね)
分類:C/C++
前へ 1 2 3 4 次へ