首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用 #define 是不是可以这样

2012-08-13 
用 #define 是否可以这样如题,看简单的代码:C/C++ code//#define 能否实现下面这段伪代码所述的功能?#defi

用 #define 是否可以这样
如题,看简单的代码:

C/C++ code
//#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;}


[解决办法]
c++用汇编应该可以,C的话就太逆天了,好像不可能
[解决办法]
C/C++ code
#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可以编译运行,但是这样做有什么风险暂时没想到,求高人解答!
[解决办法]
探讨
楼主的思想很有深度

[解决办法]
#define min(a,b) ((a)>(b)?(a):(b))

这样多简单??

热点排行
Bad Request.