Ellipses在case语句中是标准的C / C ++

时间:2011-05-07 23:28:50

标签: c++ c

我正在浏览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语句构造中的elipses。这是标准的C和C ++还是这种语言的GNU特定扩展?

3 个答案:

答案 0 :(得分:21)

这是GNU C编译器的case range扩展,它不是标准的C或C ++。

答案 1 :(得分:6)

这是一个扩展。使用-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:
            ^

答案 2 :(得分:1)

这是C的GCC扩展,在this answer中提到基本上是一个重复的问题,并已确认in the GCC documentation