2010-02-04 3 views
1

Кто-нибудь знает, как определить 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; 
} 
+0

Если данные знаете во время компиляции, вы можете сказать '#define ASF_OBJECT_GUID_TEST "\ x75 \ XB2"'. –

ответ

2
{(char)0x75, (char)0xB2, (char)0x00} 

является списком инициализатора и не сам массив (или указатель) в C89.

Вы вместо того, чтобы можно было использовать:

#define ASF_OBJECT_GUID_TEST "\x75\xB2" 
1

вы хотите, чтобы бросить ASF_OBJECT_GUID_TEST, т.е.

testFunction((char[])ASF_OBJECT_GUID_TEST)

или

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

+0

'(char)' бросает внутри фигурные скобки, конечно, не нужно (вы, наверное, знаете это, поэтому комментарий в основном для OP). Кроме того, это только C99. –

0

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

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

#define TEST SOME_MACRO("33698149") 

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

+1

Это нужно задать как новый вопрос, или вы должны отредактировать исходное сообщение, чтобы включить этот вопрос. – Ponkadoodle

+1

Определенно новый вопрос, хотя короткий ответ «нет, вы не можете этого сделать». –

Смежные вопросы