#include <stdio.h>
int main(void) {
#define N 3
#define max(a, b) ((a) > (b)?(a):(b))
#define __NR_hello 0x81
#define __NR_world 0x82
#define f(type, name) \
type name(void) { \
printf("0x%x\n", __NR_##name);\
}
f(int, hello)
f(char, world)
hello();
world();
printf("%0.3f\t", max(2.3, 1.2));
void (*ff[N])(void);
int* (*(*myff())[5])(int a, char b);
ff[1] = (void*)hello;
ff[2] = (void*)myff;
ff[0] = (void*)world;
int i = 0;
for(;i < 3; i++)
ff[i]();
void* (*fzz())(int a){
void* fff(int a){
printf("%%%%%d%%%%%\n", a);
}
typedef void* (*f)(int);
f ff = fff;
return ff;
}
void* (*fff)(int);
fff = fzz();
fff(8);
void* (*(*mmm)())(int);
mmm = fzz;
fff = mmm();
fff(0xff);
//这是一个变量,它对应下面被解释的函数,是那个类型的指针变量。
int* (*(*(*Pmyff)())[5])(int, char);
Pmyff = myff;
Pmyff();
}
//试着解释一下:
//很明显,这是一个函数,因为它能够运行
//这是一个什么样的函数呢?它没有任何参数
//它的返回值是一个指针(要从myff位置开始看)
//然而这不是一个一般的指针,它是一个含有5个元素数组的指针
//这个数组的每个元素又是什么呢?每个元素又都是一个指针
//是一个什么样的指针呢?是一个返回值为整型指针的函数的指针,并且函数带有两个参数
//如此复杂使我相信:这仅仅是个编程的文字游戏。
int* (*(*myff())[5])(int a, char b){
printf("welcome to you!\n");
}