案例陈述中的省略号是标准 C/C++

Are Elipses in case statements standard C/C++

本文关键字:C++ 标准 陈述中 省略号 案例      更新时间:2023-10-16

我正在浏览linux内核中的一些代码,我遇到了像case '0' ... '9':这样的语句

为了尝试这个,我在下面创建了测试程序。

#include <iostream>
int main()
{
    const int k = 15;
    switch (k)
    {
    case 0 ... 10:
        std::cout << "k is less than 10" << std::endl;
        break;
    case 11 ... 100:
        std::cout << "k is between 11 and 100" << std::endl;
        break;
    default:    
        std::cout << "k greater than 100" << std::endl;
        break;
    }
}   

上面的程序确实可以编译,尽管我以前从未遇到过 case 语句构造中的省略号。这是标准的C和C++还是GNU语言的特定扩展?

这是 GNU C 编译器的情况范围扩展,它不是标准的 C 或 C++。

这是一个

扩展。 使用 -pedantic 编译程序可以:

example.cpp: In function ‘int main()’:
example.cpp:9: error: range expressions in switch statements are non-standard
example.cpp:12: error: range expressions in switch statements are non-standard

clang给出了更好的警告:

example.cpp:9:12: warning: use of GNU case range extension [-Wgnu]
    case 0 ... 10:
           ^
example.cpp:12:13: warning: use of GNU case range extension [-Wgnu]
    case 11 ... 100:
            ^

这是 C 的 GCC 扩展,在本答案中提到基本上是一个重复的问题,并在 GCC 文档中得到确认。