Ответ 1
Это расширение case case компилятора GNU C, это не стандарт 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;
}
}
Программа, описанная выше, компилируется, хотя раньше я никогда не сталкивался с elipses в конструкторе case. Является ли это стандартным C и С++ или это расширение GNU для языка?
Это расширение case case компилятора 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:
^
Это расширение GCC для C, упомянутое в этом ответе, к тому, что является в основном дублирующимся вопросом, и подтверждено в документации GCC.