我想将十六进制或十进制值数组传递到函数中,而不依赖于 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 得到它,但生成警告)。
最佳答案
有人指出我在答案中引用“复合文字”,但很快就被删除了(为什么?),这让我看到 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++
关于c - 将 C 数组作为单独的值传递到函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537438/