用 #define 是否可以这样
如题,看简单的代码:
//#define 能否实现下面这段伪代码所述的功能?#define (Func类型变量).max() (Func类型变量).max((Func类型变量).a, (Func类型变量).b) typedef struct { int a, b; int *(max)(int,int);}Func;int max(int a, int b) { return a>b ? a:b;}int main(){ Func f; f.max = max; f.a = 100; f.b = 50; printf("max: %d\n", f.max()); //预处理后,上面的就会变为: //printf("max: %d\n", f.max(f.a, f.b)); return 0;}#include <stdio.h>#define fmax(fp) fp.max(fp.a, fp.b)typedef struct { int a, b; int (*max)(int,int);}Func;int max(int a, int b) { return a>b ? a:b;}int main(){ Func f; f.max = max; f.a = 100; f.b = 50; printf("max: %d\n", fmax(f)); return 0;}
[解决办法]
最好别这么干:)
[解决办法]
楼主的思想很有深度
[解决办法]
应该可以的,因为宏只是直接展开。
[解决办法]
运行一下,看结果。答案立见分晓。
[解决办法]
3楼代码,gcc编译器运行:
define_fun.c:8:8: 错误: 字段‘max’声明为一个函数
define_fun.c: 在函数‘main’中:
define_fun.c:19:8: 警告: 从不兼容的指针类型赋值 [默认启用]
define_fun.c:22:2: 警告: 隐式声明与内建函数‘printf’不兼容 [默认启用]
define_fun.c:22:22: 错误: expected expression before ‘.’ token
define_fun.c:26:1: 错误: expected ‘;’ before ‘}’ token
[解决办法]
3楼的代码gcc可以编译运行,但是这样做有什么风险暂时没想到,求高人解答!
[解决办法]