Как правильно определить массив символов - PullRequest
1 голос
/ 04 февраля 2010

Кто-нибудь знает, как определить ASF_OBJECT_GUID_TEST, чтобы избежать ошибки компиляции в строке, отмеченной ниже, или где я могу найти дополнительную информацию об этом?

#define ASF_OBJECT_GUID_TEST {(char)0x75, (char)0xB2, (char)0x00}

void testFunction(char * testChar)
{

}

int main(int argc, char * argv[])
{
   char test[] = ASF_OBJECT_GUID_TEST;

   testFunction(test);
   testFunction(ASF_OBJECT_GUID_TEST); // <- fails to compile this line of code

   return 0;
}

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010
{(char)0x75, (char)0xB2, (char)0x00}

- это список инициализаторов, который сам по себе не является массивом (или указателем) в C89.

Вместо этого вы можете использовать:

#define ASF_OBJECT_GUID_TEST "\x75\xB2"
1 голос
/ 04 февраля 2010

вы хотите разыграть ASF_OBJECT_GUID_TEST, т.е.

testFunction((char[])ASF_OBJECT_GUID_TEST)

или

#define ASF_OBJECT_GUID_TEST (char[]){(char)...}

0 голосов
/ 04 февраля 2010

Спасибо. Это было именно то, что я искал.

Предположим, я определил много строковых литералов, которые имеют 8 символов, и каждый из них на самом деле составляет значение байта. Есть ли способ создать макрос, который бы изменял эти строковые литералы, добавляя "\ x" между каждой парой символов, как показано ниже?

#define TEST SOME_MACRO("33698149")

Где TEST будет "\x33\x69\x81\x49"

...