为什么这是一个警告?我认为在很多情况下,使用多字符int常量而不是"没有意义"的数字或者用相同的值定义常量变量会更清楚.当解析wave/tiff/其他文件类型时,更清楚地将读取的值与一些‘EVAW’、‘DATA’等进行比较,而不是它们的相应值.

示例代码:

int waveHeader = 'EVAW';

为什么这是一个警告?

推荐答案

According to the standard(§6.4.4.4/10)

包含一个以上的整数字符常量的值 字符(例如,‘ab’),[.]是由实现定义的.

long x = '\xde\xad\xbe\xef'; // yes, single quotes

这是有效的ISO 9899:2011 C.它编译时没有警告,在gcc以下有-Wall,在"多字符常量"警告下有-pedantic.

Wikipedia:

多字符常量(例如"xy")是有效的,但很少有效

为了便于携带,不要将多字符常量与整数类型一起使用.

C++相关问答推荐

海湾合作委员会是否保证大小匹配的访问?

C限制限定符是否可以通过指针传递?

%p与char* 等组合缺少的GCC Wform警告

如何使用Python C API实现多线程程序?

ZED for SDL上的C语言服务器

为什么C语言允许你使用var =(struct NAME){

C中函数类型的前向声明

整型文字后缀在左移中的用途

GDB输出ARM助记符

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

用C++从外部ELF符号读取值

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

如何读取文件并将内容保存在字符串中?(在C语言中,没有崩溃或核心转储错误)

pthread_create的用法

生产者消费者计数器意外输出的C代码

程序对大输入给出错误答案

解密Chrome加密密钥

使用 c 中的 write() 函数将非 ASCII 字符写入标准输出

(GNU+Linux) 多个线程同时调用malloc()

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码