0
我寫了一個宏,它將打開的奇數索引位的數目相加。爲什麼在我的代碼中使用宏會產生錯誤?
的幾個例子:
在包含以下位的變量:
10010101
只有在索引7的位導通時,僅存在1被接通的奇數索引位,所以答案是1
在包含以下位的變量:
00101011
索引1處的位打開,索引3處的位打開,索引5處的位打開,因此總共有3個奇數索引位打開,所以答案是3.因此答案是3.
我寫了一個主函數來測試這個宏。
這裏就是整個程序:
#include <stdio.h>
#define ODD(n)\
int count = 0;\
int i = 1; \
while(n>>i)\
{\
if(((n>>i)%2) == 1)\
count++;\
i = i+2;\
}\
int main()
{
int i;
int j;
int array1[] = {1,2,3,4};
/*array1 contains (binary representation):
00000001
00000010
00000011
00000100
After passing these into the macro:
00000001 ----> 0 odd indexed bits are turned on
00000010 ---->1 odd indexed bit is turned on
00000011 ---->1 odd indexed bit is turned on
00000100 ----> 0 odd indexed bits is turned on
*/
int array2[4];
for(i=0; i<4; i++)
{
array2[i] = ODD(array1[i]);
}
for(j=0; j<4; j++)
{
printf("Array2: %d\n",array2[j]);
}
return 0;
}
我不知道爲什麼我得到了以下錯誤:
odd.c: In function ���main���:
odd.c:4:5: error: expected expression before ���int���
int count = 0;\
odd.c:34:19: note: in expansion of macro ���ODD���
array2[i] = ODD(array1[i]);
^
odd.c:8:13: error: ���count��� undeclared (first use in this function)
count++;\
^
計數宣佈,所以我不知道什麼是它的問題。
爲什麼我得到這些錯誤,我該如何解決它們?
非常感謝您! @StoryTeller – Tree
@樹 - 像我的編輯建議。同時也要注意正確的移位有符號整數有實現定義的結果。 – StoryTeller
謝謝。事情是,我有興趣把它寫成一個宏。我怎樣才能做到這一點? @StoryTeller – Tree