#include
void F(int a, int b){printf("hello %d %d\n", a, b);};
typedef void (&pF)(int, int);
int main()
{
int a = 1, b = 3;
pF x = F;
x(a, b);
printf("0x%X 0x%X", F, x);
}
全局变量是被存储在内存中的全局静态区的, 全局变量的声明总是定义, 因为编译器会将他们的值初始化为其默认值, 可以在全局范围内定义变量, 但不能在全局范围内实施操作, 因为操作是在函数中实现的, 你要分清初始化和赋值的不同, 所以比如有一个全局变量a;
int a; // 等价于int a(int());
则以下对a的操作都是违法的:
++a;
a--;
a += 1;
....
程序是由函数构建的, 而不是文件构建的, 所以以上操作根本执行不到, 所以编译不同过, 而且C/C++编译器貌似只识别全局范围内变量的声明定义, 所以在你试图global = 10的时候它认为你要创建一个不带类型标识符的变量global, 所以给你一个错误; 另外它又发现你企图声明的这个变量与已存在的变量名有冲突, 所以它又给你一个错误...