C 表达式必须是可修改的左值
C Expression must be a modifiable lvalue
我正在努力解决 C 代码中的错误。
#define MAX(i, limit) do \
{ \
if (i < limit) \
{ \
i++; \
} \
} while(1)
void main(void)
{
MAX(0,3);
}
这会导致以下错误。
Error[Pe137]: expression must be a modifiable lvalue
有什么想法吗?提前谢谢你。
对于根据 C 标准的初学者,不带参数的函数 main 应声明为
int main( void )
您向宏传递了 MAX 整数常量 0。您不能增加它。
实际上宏展开为以下代码
do
{
if ( 0 < 3 )
{
0++;
}
} while(1);
宏不是函数。因此,在您的宏中,执行了直接替换 i 和 0 和 3 的限制。
您可以声明一个变量并用值 0 对其进行初始化,然后将其传递给宏。在这种情况下,您将得到一个无限循环。
在此用例中,您尝试递增 0
,这是不可能的。
do {} while
在这种情况下完全没有意义。
我会这样写:
#define MAX(i, limit) (((i) < (limit)) ? (i) + 1 : (i))
void main(void)
{
int i = 5;
i = MAX(i, 7);
printf("%d\n", MAX(0,3));
printf("%d\n", i);
MAX(0,3); // this statement has no effect
}
并且(可能)您不会尝试:
0 = MAX(0,3);
你需要记住这是宏,i
和 limit
将被计算多次,因为它们在宏中。示例:
#define MAX(i, limit) (((i) < (limit)) ? i + 1 : i)
int y = 1;
int increase(void)
{
y++;
}
void main(void)
{
printf("%d\n", MAX(increase(),3));
}
某些表达式可能会导致未定义的行为:
#include <stdio.h>
#define MAX(i, limit) (((i) < (limit)) ? i + 1 : i)
int y = 1;
void main(void)
{
printf("%d\n", MAX(y++,3));
}
我正在努力解决 C 代码中的错误。
#define MAX(i, limit) do \
{ \
if (i < limit) \
{ \
i++; \
} \
} while(1)
void main(void)
{
MAX(0,3);
}
这会导致以下错误。
Error[Pe137]: expression must be a modifiable lvalue
有什么想法吗?提前谢谢你。
对于根据 C 标准的初学者,不带参数的函数 main 应声明为
int main( void )
您向宏传递了 MAX 整数常量 0。您不能增加它。
实际上宏展开为以下代码
do
{
if ( 0 < 3 )
{
0++;
}
} while(1);
宏不是函数。因此,在您的宏中,执行了直接替换 i 和 0 和 3 的限制。
您可以声明一个变量并用值 0 对其进行初始化,然后将其传递给宏。在这种情况下,您将得到一个无限循环。
在此用例中,您尝试递增 0
,这是不可能的。
do {} while
在这种情况下完全没有意义。
我会这样写:
#define MAX(i, limit) (((i) < (limit)) ? (i) + 1 : (i))
void main(void)
{
int i = 5;
i = MAX(i, 7);
printf("%d\n", MAX(0,3));
printf("%d\n", i);
MAX(0,3); // this statement has no effect
}
并且(可能)您不会尝试:
0 = MAX(0,3);
你需要记住这是宏,i
和 limit
将被计算多次,因为它们在宏中。示例:
#define MAX(i, limit) (((i) < (limit)) ? i + 1 : i)
int y = 1;
int increase(void)
{
y++;
}
void main(void)
{
printf("%d\n", MAX(increase(),3));
}
某些表达式可能会导致未定义的行为:
#include <stdio.h>
#define MAX(i, limit) (((i) < (limit)) ? i + 1 : i)
int y = 1;
void main(void)
{
printf("%d\n", MAX(y++,3));
}