Lvalue требуется ошибка с макросом - PullRequest
0 голосов
/ 24 марта 2012

Почему следующий код сообщает об ошибке Lvalue? И как мы можем написать макрос, который получает массив и количество элементов в массиве в качестве аргументов, а затем распечатывает элементы массива ??

#define arr(b) printf("%d",b++);\
               printf("%d",b);


int main()
{
    arr(5);
}

Ответы [ 3 ]

4 голосов
/ 24 марта 2012

Если вы развернете макрос, вы получите следующее:

int main()
{
    printf("%d",5++);
    printf("%d",5);
}

Вы не можете выполнить постинкрементную константу 5, поэтому вы получите ошибку.

Помните, что макросы нефункции.Если вы хотите, чтобы он действовал как функция, просто создайте функцию:

void arr(int b) {
    printf("%d",b++);
    printf("%d",b);
}
1 голос
/ 24 марта 2012

Первый l в lvalue обозначает левый.

Можно назначать только левые значения.

когда вы пишете x ++ вызначит x = x + 1 (также вы получаете значение из него).

Так что проблема в том, что нет смысла писать 5 = 5 + 1

, может быть, вы хотели бы сделать это:

int x = 5;
arr(x);
1 голос
/ 24 марта 2012

Поскольку часть этого макроса расширяется до 5++, что недопустимо C. Попробуйте использовать b+1 вместо b++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...