typedef用法小結


title: typedef用法小結
date: 2016-06-07 10:33:27
categories: C++
tags:
- C++
- C
- C++小結


typedef使用小結

stackoverflow上看到的一個問題。

typedef void(*FunctionFunc)();

Three Question:

1.Why is typedef used?
2.The syntax looks odd;after void should there not be a function name or something? It looks like an anonymous function.
3.Is a function pointer created to store the memory address of a function ?

三個問題概括一下就是:

  • 使用typedef有什麼好處
  • 語法和常見的語法不同
  • 創建一個函數指針是不是來存儲函數的內存地址的?

Answer1:

typedef 是一個聯繫變量類型和變量名稱的構造語言

你可以以類型初始化的方式使用它,比如:

typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();

可以使用以下的方式對上面的定義加以使用:

myinteger i;    // is equivalent to     int i;
mystring s;     // is the same as       char *s;
myfunc f;       //compile equally as    void(*f)();     

如上所示,可以使用如上所示的定義來替換typedef定義的名稱。

主要的難點在於C和C++中函數指針語法的可讀性,使用typedef可以提高這類聲明的可讀性。
然而,雖然在語法上是行得通的,但是函數不像其他簡單的類型,函數可能會有返回值和參數,這樣有時候會有複雜的函數指針。
對於以上的三個問題,回答如下:

  • Why is typedef used?

爲了簡化代碼的可讀性-尤其是函數指針或者是結構體名稱

  • The syntax looks odd–

使得代碼的可讀性更高。

  • Is a function pointer created to …

是的,函數指針存儲函數的地址。
然而,當typedef用於結構體中時,僅僅是爲了提高程序的可讀性,程序在編譯時編譯器會在typedef使用的地方使用實際代碼替換。

Example:

typedef int (*t_somefunc)(int,int);

int product(int u, int v) {
  return u*v;
}

t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章