J'ai écrit une macro qui résume le nombre de bits indexés impairs qui sont activés.Pourquoi l'utilisation d'une macro dans mon code produit des erreurs?
Quelques exemples:
Dans la variable qui contient les bits suivants:
10010101
Seul le bit à l'index 7 est activé, il n'y a que 1 bit impair indexé est activé, si la réponse est 1.
Dans la variable qui contient les bits suivants:
00101011
Le bit à l'index 1 est activé, le bit à l'index 3 est activé et le bit à l'index 5 est activé. Par conséquent, un total de 3 bits indexés impairs sont activés. La réponse est 3.
J'ai écrit une fonction principale pour tester cette macro.
Voici le programme complet:
#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;
}
Je ne sais pas pourquoi je suis les erreurs suivantes:
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++;\
^
compte est déclaré, donc je ne sais pas quel est le problème avec elle. Pourquoi ai-je eu ces erreurs et comment puis-je les corriger?
Merci beaucoup! @StoryTeller – Tree
@Tree - Comme mon éditeur le suggère. Et n'oubliez pas que les entiers signés qui se déplacent à droite ont des résultats définis par l'implémentation. – StoryTeller
Merci. La chose est, je suis intéressé à écrire cela comme une macro. Comment puis-je atteindre cet objectif? @StoryTeller – Tree