错误:无效的操作数到二进制+(有' char *'和#39; char *'),使用宏

时间:2017-05-13 16:48:50

标签: c macros

(编辑:t1的数据类型,t2不再缺失)

#include <stdio.h>

#define SWAP(a, b) a = ( a = a + b, b = a- b, a-b )

int main()
{
    char *names[] = {"Pat", "Bob", "Ted", NULL};
    char *t1 = names[1];
    char *t2 = names[2];

    printf("%d %d\n",t1,t2);
    SWAP(t1,t2);
    printf("%d %d\n",t1,t2);

}

我知道其他版本的交换可行。但是,我想专注于这个特定的一个只是为了一个妈妈......我不喜欢盲目地输入代码。您能否帮助我更好地了解错误的来源/原因?

1 个答案:

答案 0 :(得分:3)

有几个不同的答案:

  1. 不要试图使用&#34;棘手的&#34;交换宏。
  2. 您无法添加指针。
  3. 依次采取这些:

    1。我知道交换宏正在尝试做什么,但是,严肃地说,它的优点是什么?只是说

    char *tmp = t1;
    t1 = t2;
    t2 = tmp;
    

    每个人都知道这意味着什么。不需要任何技巧。

    在我看来(有些人可能不同意),没有好的交换宏这样的东西。每个交换宏引入的问题都比解决的问题多。

    2。你的&#34;棘手&#34;交换宏,虽然它可能适用于整数(并且miiiiiiiiight工作为浮点)不适用于指针,它不起作用的原因是C认为它没有意义添加指向指针的指针。您可以向指针添加整数,但不能添加两个指针。