#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#define CHECK(x,y,n) (x > 0 && x < n && y > 0 && y < n ? 1 : 0))
int main(void)
{
/*char s[5];
int i;
strcpy(s,"abcd");
i = 0;
putchar(s[++i]);*/
int i = CHECK(2,3,10);
printf("%d",i);
return 0;
}
我想声明一个宏来检查两个值x和y是否在区间中但是当我尝试编译和构建时,我从编译器中得到这些错误:
line 4 error: expected ',' or ';' before ';' ')' token
答案 0 :(得分:2)
宏中有一个额外的)
。无论如何,我建议将括号中的所有宏参数括起来,以避免优先级问题和其他一些宏观陷阱:
#define CHECK(x,y,n) ((x) > 0 && (x) < (n) && (y) > 0 && (y) < (n) ? 1 : 0)
答案 1 :(得分:1)
简而言之,不要!
函数几乎总是比宏更好:
如果需要,可以将其设为静态,以保持名称私密。 如果需要,可以将其设置为静态内联以允许在头文件中使用。
答案 2 :(得分:0)
#define CHECK(x,y,n) (x > 0 && x < n && y > 0 && y < n ? 1 : 0))
^extra ')'
答案 3 :(得分:0)
问题的核心是宏观检查&#39;
这是该程序的更正版本,带有注释
#include <stdio.h>
// #include <stdbool.h> // not needed for posted code
// #include <ctype.h> // not needed for posted code
// notice the parens around the condition
// notice the end of the action part of the macro only has
// a single paren, to match the opening paren
// at the beginning of the action part of the macro
#define CHECK(x,y,n) ( (x > 0 && x < n && y > 0 && y < n) ? 1 : 0)
int main(void)
{
/*char s[5];
int i;
strcpy(s,"abcd");
i = 0;
putchar(s[++i]);*/
int i = CHECK(2,3,10);
printf("%d",i);
return 0;
} // end function: main
结果干净地编译并执行所需的操作
注意适当的代码缩进
indent after every opening brace '{'
un-indent before every closing brace '}'