将C数组作为单独的值

时间:2017-01-08 20:21:16

标签: c arrays

我想将十六进制或十进制值数组传递给函数,而不依赖于ascii字符串中的转义序列。

#include <stdio.h>

char one[] = "\xDE\xAD\xBE\xEF";
char two[] = { 0xDE,0xAD,0xBE,0xEF };

int main()
{
    puts(one);
    puts(two);
    puts("\xDE\xAD\xBE\xEF");
    puts((char *){0xDE,0xAD,0xBE,0xEF}); // I guess that's not how it works
}

我在某处看到过这样的语法,但无法追踪描述正确使用它的文档部分。

当我将这样的语法传递给“mikroC Pro for AVR”时,它会翻转并删除“无效表达式”。但仍有一些东西(“\ xAB \ xCD”);传递得很好。标准的哪一部分描述了它的用途? microC不符合C99(avr-gcc得到它,但产生警告)。

1 个答案:

答案 0 :(得分:-1)

有人指我在回答中引用“复合文字”但很快被删除(为什么?),这使我https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html看起来只有C99 / C ++兼容,这解释了伪造它的用法。

它还要求对后续的文字内部类型声明进行大小声明:

puts((char [4]){0xDE,0xAD,0xBE,0xEF}); // valid, but only in C99 and later or C++