C言語のマクロで便利そうなもの

C言語のマクロで面白そうなものをメモ!

#include

#define _PFP(str) printf("%s\n", str)
#define ASIZEOF(array) (sizeof(array) / sizeof(array[0]))
#define FOR(i, j) for(((i) = 0); ((i) < (j)); ((i)++))
#define ISR(str) str, #str

enum etest{ aaa, bbb, ccc };

typedef struct _stest
{
    enum etest yyy;
    char *name;
}stest;

int main()
{
    int i;

    stest ts[] = { ISR(aaa), ISR(bbb), ISR(ccc) };

    FOR(i, ASIZEOF(ts))
        _PFP(ts[i].name);

}

enumとマクロの組み合わせ
for文
配列の要素数を求める

の3つが特に面白いとおもう。
積極的にマクロを使うのもいいかなーっ

ただ、マクロが嫌いな人もいると思うので、使っていいのか悩みどころ。。

スマートフォンのCPUとか

最近流行りのスマートフォンや情報端末などに積んであるCPUやチップセットについて気になったのでチョコっと調べたメモ

まずiPhoneの原型のiPod touchから。

第1世代

ARM11 400MHz 1.1.2から412MHz

第2世代

ARM11 533MHz

第3世代

ARM Cortex-A8 600MHz

次はiPhone

iPhone

400MHz 1.1.2から412MHz ARMv6ベース。SIMDとFPUを内蔵する32ビットRISC

iPhone 3G

iPhoneと同じ

iPhone 3GS

600 MHz ARM Cortex-A8

iPhone 4

Apple A4 =? Cortex-A8 (すごく似てるらしい)

今欲しいiPad

Apple A4 =? Cortex-A8 (すごく似てるらしい)

最後に携帯達

Nexus One

Snapdragon

Xperia

Snapdragon

X06HT

Snapdragon

CPUの製造メーカーを見ると、

AppleはSamsung製

GooleはQualcomm製

Snapdragonってなんじゃーと思って調べたらCPU名じゃなくてチップセットだった@@

これまた ARMを積んでるみたいです。

どうやら流行りのスマート系は ARM を積んでるみたい。

違いはチップセットやデバイス構成だったりするみたいです。

OSが動くCPUはインテルとAMDとARMでおkってことですか?@@ なんて思ったり。

こんどARMについて調べてみよう。

Eclipseのインストール方法

4回も毎回調べてるので そろそろメモメモ

Linuxでの、日本語化と、C, C++の設定方法です。

ちなみに、Windwos用のEclipseは

http://mergedoc.sourceforge.jp/

ここの、”Pleiades All in One”で最初から使える環境がZipで配布されています。

さて、流れです↓↓。

  1. Eclipseのダウンロード
  2. Pleiadesのダウンロード
  3. jreもしくはjdkのダウンロード
  4. 解凍
  5. eclipseへプラグインを展開
  6. eclipse.ini をチョコッと編集

1. まずEclipseをダウンロード

http://www.eclipse.org/downloads/

ここでは “Eclipse IDE for C/C++ Developers (79 MB)“をダウンロードします

2. 次に日本語化プロジェクトのプレアデスをダウンロード

http://mergedoc.sourceforge.jp/

“ダウンロード”の下に、さり気なくある”Pleiades 本体ダウンロード”の安定版1.3.1“をダウンロードします(2010/05/22現時点)

3. 最後にEclipseはjavaで動いているのでJVMをダウンロード

今回では

jre http://java.com/ja/download/linux_manual.jsp?locale=ja&host=java.com:80

の、”Linux (自己解凍ファイル) ファイルサイズ: 19.9 MB“をダウンロード

4. 解凍します

jreはバイナリファイル(自己解凍)で配布しているので、パーミッションを与えて、ターミナルから

./jre-6u20-linux-i586.bin

のように実行して解凍します。

5. 次に、eclipseフォルダへプラグインを突っ込む

  1. 解凍された”jreなんちゃら“フォルダの名前を”jre“へ変更
  2. 解凍したeclipseフォルダの中へjrcフォルダごと突っ込みます
  3. preadesなんちゃら“フォルダの”features“の中身を”eclipse“フォルダの”features“へ突っ込みます
  4. 同じく、”preadesなんちゃら“フォルダの”plugins“の中身を”eclipse“フォルダの”plugins“へ突っ込みます

6. 最後にeclipseがプラグインを読み込むように設定して、起動します。

“eclipse”フォルダの中の”eclipse.ini”の最後に、

-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

と追記します。

後は起動するだけです。

そういや、”なんちゃら “って意味分かるよね;;

ここでは “Eclipse IDE for C/C++ Developers (79 MB)”をダウンロードします
2. 次に日本語化プロジェクトのプレアデスをダウンロードしてきます
http://mergedoc.sourceforge.jp/
“ダウンロード”の下に、さり気なくある”Pleiades 本体ダウンロード”の安定版1.3.1をダウンロードします(2010/05/22現時点)

3. 最後にEclipceはjavaで動いているのでJVMをダウンロードしてきます。
今回ではjre http://java.com/ja/download/linux_manual.jsp?locale=ja&host=java.com:80

の、”Linux (自己解凍ファイル)  ファイルサイズ: 19.9 MB”をダウンロード

4. 解凍します
jreはバイナリファイル(自己解凍)で配布しているので、パーミッションを与えて、ターミナルから”./jre-6u20-linux-i586.bin”
のように実行して解凍します。

5. 最後に、eclipceフォルダへプラグインを突っ込んで起動。

1. 解凍された”jreなんちゃら”フォルダの名前を”jre”へ変更
2. 解凍したeclipceフォルダの中へjrcフォルダごと突っ込みます
3. “preadesなんちゃら”フォルダの”features”の中身を”eclipceフォルの”features”へ突っ込みます
4. 同じく、”preadesなんちゃら”フォルダの”plugins”の中身を”eclipceフォルの”plugins”へ突っ込みます

6. 最後にeclipceがプラグインを読み込むように設定します。
“eclipce”フォルダの中の”eclipse.ini”の最後に、”-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar”と追記します。

後は起動するだけです。

コンパイラによってはintもcharも同じ?

最近アセンブラを弄ってて、気がついたのでメモメモ

アライメントは実行時でなくて、コンパイルで起きるみたい

  • コンパイル前
int sub01(char i, char j)
{
    i += j;
    return i;
}

void main()
{
    char i = 10;
    char j = 20;
    i = sub01(i, j);
}
  • コンパイルしたところ。

8bitのデータも32bitのデータとしてコンパイルされてます。

つまり、32bitコンパイラではcharを使っても意味が無い。?

.file	"test.c"
.text
.globl sub01
.type	sub01, @function
sub01:
pushl	%ebp
movl	%esp, %ebp
subl	$8, %esp
movl	8(%ebp), %edx
movl	12(%ebp), %eax
movb	%dl, -4(%ebp)
movb	%al, -8(%ebp)
movzbl	-4(%ebp), %edx
movzbl	-8(%ebp), %eax
leal	(%edx,%eax), %eax
movb	%al, -4(%ebp)
movsbl	-4(%ebp),%eax
leave
ret
.size	sub01, .-sub01

.globl main
.type	main, @function
main:
pushl	%ebp
movl	%esp, %ebp
subl	$24, %esp
movb	$10, -1(%ebp)
movb	$20, -2(%ebp)
movsbl	-2(%ebp),%edx
movsbl	-1(%ebp),%eax
movl	%edx, 4(%esp)
movl	%eax, (%esp)
call	sub01
movb	%al, -1(%ebp)
leave
ret
.size	main, .-main
.ident	"GCC: (Ubuntu 4.4.1-4ubuntu9) 4.4.1"
.section	.note.GNU-stack,"",@progbits

コンパイラはGCCです。
間違っていたらスイマセンm。。