本帖最后由 与龙共舞 于 2018-7-3 18:04 编辑
抽象一个问题,我选择一个变量出来,然后使用。
- 1 #include<stdio.h>
- 2 int A,B,C;
- 3 #define Pick(a) (a)?(A):(B)
- 4 void main()
- 5 {
- 6 printf("%d\t%d\t%d\n",A,B,C);
- 7 C=Pick(1);
- 8 printf("%d\t%d\t%d\n",A,B,C);
- 9 }
- ~
复制代码 如此是可以的 Pick(1)就是把A选出来,赋值给C。 Pick(0)就是把B选出来,赋值给C。
实际问题并不是这样的,应该是:
- 1 #include<stdio.h>
- 2 int A,B,C;
- 3 #define Pick(a) (a)?(A):(B)
- 4 void main()
- 5 {
- 6 printf("%d\t%d\t%d\n",A,B,C);
- 7 Pick(1)=C;
- 8 printf("%d\t%d\t%d\n",A,B,C);
- 9 }
- ~
复制代码 就是第七句话不同 ,其实我是想PICK一个出来,对其赋值。
那么问题来了,这样是编译失败的,=左值是常量不可以赋值,失败。
类似的写出函数也是失败的
- 1 #include<stdio.h>
- 2 int A,B,C;
- 3 int Pick(int a)
- 4 {
- 5 int tem=a?A:B;
- 6 return tem;}
- 7 }
- 8
- 9 void main()
- 10 {
- 11 printf("%d\t%d\t%d\n",A,B,C);
- 12 Pick(1)=C;----FAIL!!!!!!
- 13 printf("%d\t%d\t%d\n",A,B,C);
- 14 }
复制代码 函数不能作为左值!只能如下- 2 int A,B,C;
- 3 void Pick(int a,int *b)
- 4 {
- 5 *b = a ? A : B;
- 7 }
- 8
- 9 void main()
- 10 {
- 11 printf("%d\t%d\t%d\n",A,B,C);
- 12 Pick(1, &C);
- 13 printf("%d\t%d\t%d\n",A,B,C);
- 14 }
复制代码
那么该如何修改呢?
不希望写成函数形式的,写成宏定义形式的比较好。
|
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
所以,楼主希望 条件运算符给你返回一个变量?或者说是一块地址,让你去赋值?
评分
查看全部评分
跪谢 搞C这么久 还不知道这个知识 太犀利了
1 #include<stdio.h>
2 int A,B,C;
3 #define Pick_0 A
4 #define Pick_1 B
5 //#define Pick(a) (a)?Pick_1ick_0 ------这是不行的!
6 #define Pick(a) Pick_##a ------------------成功!
7 void main()
8 {
9 printf("%d\t%d\t%d\n",A,B,C);
10 Pick(1)=1;
11
12 printf("%d\t%d\t%d\n",A,B,C);
13 }
14
我真的是第一次看到这个做法 转义 的 #define Pick(a) Pick_##a 可以
#define Pick(a) Pick_(a)不行
这个答案符合楼主的意思,赞同
可以的 你这是正经方法
1 #include<stdio.h>
2 int A,B,C;
3 //#define Pick(a) * ( (a)?(&A)&B))-----OK
4 #define Pick(a) (a)?(A)B)--------------FAIL
5 void main()
6 {
7 printf("%d\t%d\t%d\n",A,B,C);
8 Pick(1)=1;
9
10 printf("%d\t%d\t%d\n",A,B,C);
11 }
12
评分
查看全部评分