我想将十六进制或十进制值数组传递给函数,而不依赖于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得到它,但产生警告)。
答案 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++