2009年5月19日 星期二

C的typedef

typedef的功用就是把某些東西變成一個預設的型態(像是int、double、char等型態)來使用
這些東西可以是enum、struct...


  • 原本:
struct people{
char name[20];
int height;
int weight;
};

struct people a;

  • 可以寫成
typedef struct people{
char name[20];
int height;
int weight;
}People;

People a;


  • 原本
enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum week today = Sun;
  • 可以寫成
typedef enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat}Week;
Week today = Sun

C的enum

實際上enum應該裡面是int,
可以用printf的%d來顯示,
預設的對應就是從數字0開始,
例如enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat};
Sun = 0, Mon = 1, Tue = 2, Wed = 3..........................

當然這個對應可以手動指定,像是這樣:
enum week{ Sun=1, Mon, Tue, Wed, Thu, Fri, Sat};
手動指定之後後面若沒有手動指定則會依照手動指定的那一個一直遞增。
Sun = 1, Mon = 2, Tue = 3, Wed = 4.............

要注意有時候手動指定可能會有問題,像是這樣:
enum week{ Sun, Mon, Tue=1, Wed, Thu, Fri, Sat};
Sun = 0, Mon = 1, Tue = 1, Wed = 2.............


====================================================================
  • 一般用法,宣告一個叫做week的列舉,宣告一個week型態的today且指明是哪一天
enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum week today = Sun;

  • 在宣告week時可以順便宣告這種型態的變數today
enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat}today;
today = Sun;

  • 可以使用typedef把enum week定義成Week型態,之後就直接使用Week型態來宣告變數即可,不必每次都再加入enum(簡單來說就是之後都用Week取代enum week)
typedef enum week{ Sun, Mon, Tue, Wed, Thu, Fri, Sat}Week;
Week today = Sun

2009年5月5日 星期二

ubuntu內的sh是指到dash

bin/
lrwxrwxrwx 1 root root 4 Dec 6 16:29 sh -> dash

dash使用for(( i=0;i<10;i++> ))這種用法會出現
Syntax error: Bad for loop variable




解決方法是:
  1. 使用bash來跑script
    bash a.sh
  2. 修改~/.bashrc加入
    alias sh='bash'



ps. 使用dash的原因
sudo dpkg-reconfigure dash

The default /bin/sh shell on Debian and Debian-based systems is bash.
However, since the default shell is required to be POSIX-compliant, any shell that conforms to POSIX, such as dash, can serve as /bin/sh.
You may wish to do this because dash is faster and smaller than bash.