表達能力實在有限,不知道怎麼描述,先寫這兒吧: c++
void (test)(int a) 函數
{ spa
printf("Test ~~: %d",a ); 指針
} ci
void test1(int a) 編譯器
{ it
printf("Test ~~: %d",a ); io
} 編譯
int func(int a) function
{
printf("func %d :" ,a );
return a;
}
typedef int(*fun)(int);
fun funct(int b)
{
printf("funcion :%d",b);
return func;
}
typedef fun(*funt)(int a);
typedef fun abc(int a);
---------------------------
test(10000);
test1(10000);
funt a = funct;
(a(1))(2);------------------輸出:function 1func 2
abc *b = funct;
b(2);-----------------------輸出:function 3
還不是很清楚c++提供 函數名加括號這種語法的意義,但廣泛解釋爲括號調用函數是爲了區別類函數宏;
另外,一個沒有獲得驗證的解釋是,extern void (test)(int a); 函數指示符加上括號後,
將發生從函數到指針的轉換,並經過此指針調用函數;
不加括號的話,函數到指針的轉換被抑制,直接經過函數指示符調用函數。
另外,關於int func(int a)(int b);這樣的形式應該沒有相應語法,只是編譯器會將
typedef出的函數指針展開,造成這種形式;
eg; typedef fun(*funt)(int a);展開後爲:int (*funt)(int a)(int b);
關於函數參數表後接參數表的形式不知道我確實見過仍是隻是編譯結果中出現過,還須要指點;
編譯結果不等於語法;