C语言中的MACRO宏的用法

soul376 2013-12-12 02:03:51
本人在写一个struct的链表类型结构的排序程序,遇到了一下疑惑
我的struct结构如下:

struct test{
int a;
int b;
int c;
struct test *next;
}

typedef struct test Test

int main(void){
Test myStruct;
}



此时我希望给用户一个选择,如果输入0就通过比较a成员来排序,如果输入1就通过比较b成员来排序,如果输入2就通过比较c成员来排序

目前我的方法是比较麻烦的写了三个不同的比较function,然后做成函数指针
每个函数分别三个不同的成员变量之差

小弟想问的是没有没方法能给根据条件来#define OBJECT
如果用户输入0 就#define OBJECT a
输入1 就 #define OBJECT b
输入2 就 #define OBJECT c


这样就只需要写一个比较function,return ( (myStruct->OBJECT) - (myStruct->OBJECT) ) 就好了
...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
soul376 2013-12-17
  • 打赏
  • 举报
回复
谢谢楼上的各位哦,我最后采取的 函数指针的方式 写了一个类似面向对象的 return value的函数
qq120848369 2013-12-13
  • 打赏
  • 举报
回复
你准备一个数组装3个函数指针,指定0,1,2作为下标,然后去比较不就是了,运行期的问题怎么还整出个宏来。 typedef int (*compare_function)(struct test *l, struct test *r); compare_function funcs[3];
lm_whales 2013-12-12
  • 打赏
  • 举报
回复
比较函数传递一个index 参数就可以了。 这样,很多库函数,就不能直接用了。 不过,C链表也没有库函数,可以排序; 所以直接写个用三参数比较的排序函数就行了, 比较用三参数比较,两个节点一个索引。 排序多传递一个,索引值参数,就行了。
jiandingzhe 2013-12-12
  • 打赏
  • 举报
回复
你还不如这样:

struct test
{
  int data[3];
  struct test* next;
};
max_min_ 2013-12-12
  • 打赏
  • 举报
回复
宏在这里不行的!在预编译器就已经替换了的! 这里最好用联合体,动态的决定用那个!完全没有必要定义三个!
赵4老师 2013-12-12
  • 打赏
  • 举报
回复
运行期要想修改编译期的变量值的话,请将编译和运行放在一个循环批处理中。
图灵狗 2013-12-12
  • 打赏
  • 举报
回复
用宏肯定不行,因为宏是固定的,不会随着输入而变化,你可以增加一个: int sort(TEST* this, int field) 这样的函数,其中field就是排序所依据的域。
引用 楼主 soul376 的回复:
本人在写一个struct的链表类型结构的排序程序,遇到了一下疑惑 我的struct结构如下:

struct test{
int a;
int b;
int c;
struct test *next;
}

typedef struct test Test

int main(void){
    Test myStruct;
}

此时我希望给用户一个选择,如果输入0就通过比较a成员来排序,如果输入1就通过比较b成员来排序,如果输入2就通过比较c成员来排序 目前我的方法是比较麻烦的写了三个不同的比较function,然后做成函数指针 每个函数分别三个不同的成员变量之差 小弟想问的是没有没方法能给根据条件来#define OBJECT 如果用户输入0 就#define OBJECT a 输入1 就 #define OBJECT b 输入2 就 #define OBJECT c 这样就只需要写一个比较function,return ( (myStruct->OBJECT) - (myStruct->OBJECT) ) 就好了
版主大哥 2013-12-12
  • 打赏
  • 举报
回复
#define 是预编译 也就是说,程序运行的时候,已经确定了 所以不能用它

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧