C语言:从main调用宏返回奇怪错误

C语言:从main调用宏返回奇怪错误,c,C,所以我必须写一个宏来检查数字数组,并返回左位为1,右位为1的数字数 例如:10111 这是我的宏: 因此,我的检查宏在主返回错误: unrecognized token illegal escape sequence syntax error: missing ';' before 'constant' 至少有两种打字错误: 比特数-0\应为bitcount=0\ half=sizeofint*8\2;\应为half=sizeofint*8/2\ 将函数作为宏编写是非常糟糕的编程实践 建议:

所以我必须写一个宏来检查数字数组,并返回左位为1,右位为1的数字数

例如:10111

这是我的宏:

因此,我的检查宏在主返回错误:

unrecognized token
illegal escape sequence
syntax error: missing ';' before 'constant'

至少有两种打字错误:

比特数-0\应为bitcount=0\

half=sizeofint*8\2;\应为half=sizeofint*8/2\


将函数作为宏编写是非常糟糕的编程实践

建议:

#define check( value )  ((value)&0x01 && (value)&(1<<(sizeof(int)-1))

int result = 0;
for( size_t i=0; i<(sizeof(array)/sizeof(int)); i++ )
{
    result += check( array[i] );
}
printf( "%d\n", result );

澄清这个问题。是什么导致了这个错误..编译器抱怨这个部分half=sizeofint*8\2;\你想除以2吗?在这种情况下,使用half=sizeofint*8/2\你到底为什么要写一个宏那么大的函数?宏有其用途。我很难相信这是一个可以证明自己的宏。您应该将其设置为函数—如果您想要类似宏的属性,可以尝试将其设置为静态内联—并将其作为函数而不是宏进行调试。这将检查单个数字:定义检查值值&0x01&&value&1错误已修复,但仍然相同errors@DannyNitman:如果修复了这两个错误,您将不会得到相同的编译错误。事实上,当编译时没有这些错误,程序运行并报告1。所以,重新审视你是否真的修复了它们。然后将宏重写为函数-使用宏进行此操作是非常愚蠢的。
unrecognized token
illegal escape sequence
syntax error: missing ';' before 'constant'
#define check( value )  ((value)&0x01 && (value)&(1<<(sizeof(int)-1))

int result = 0;
for( size_t i=0; i<(sizeof(array)/sizeof(int)); i++ )
{
    result += check( array[i] );
}
printf( "%d\n", result );