我是C编程的新手。我想当你输入像#define Const 5000
这样的东西时,编译器只是在编译时将每个Const的实例替换为5000。那是错的吗?
我尝试在我的代码中执行此操作,并且出现语法错误。为什么我不能这样做?
#define STEPS_PER_REV 12345
... in some function
if(CurrentPosition >= STEPS_PER_REV)
{
// do some stuff here
}
编译器抱怨if语句带有语法错误,但没有提供详细信息。
答案 0 :(得分:12)
评论中的人是对的。你的#define结尾几乎肯定有一个分号。这意味着您的作业变为:
CURRENT_POSITION = 12345;;
(假设你在行尾有一个分号......)
但你的if会变成:
if(CurrentPosition >= 12345;)
当然无效。
记住,#define不是C代码。他们不需要分号。
答案 1 :(得分:2)
您的代码片段是正确的。 #define实际上是一个字符串替换(具有更多的智能)。
您可以使用-E选项检查预处理器在gcc中执行的操作,该选项将在预处理器运行后输出代码。
答案 2 :(得分:0)
你是正确的,因为C预处理器只会用STEPS_PER_REV
替换12345
。因此,基于您提供的代码,您的if语句看起来很好。
要了解这一点,请您发布您的代码和错误消息的实际内容。
答案 3 :(得分:0)
当你说编译器用宏的内容替换每个实例时,你是对的。检查CurrentPosition的类型,可能是错误。
答案 4 :(得分:0)
是的,但那应该是一个const,而不是一个宏。您可能在比较中输入了错误的类型。
答案 5 :(得分:0)
c中的#define是宏,c预处理器使用它们在找到它们时替换它们。例如,在源代码中
**#define MAX_VALUE 500**
*if( reservations < **MAX_VALUE** )*
{
......
}
will be become into
*if( reservations < **500**)*
{
......
}
预处理步骤后。这样它们就可以用在句子中的布尔状态中。