Bạn sẽ không thể thực hiện việc này trong tiêu chuẩn C với tuyên bố switch-case
.
(như câu trả lời khác đã chỉ ra, một số trình biên dịch có phần mở rộng phi tiêu chuẩn cho phép này)
Thay vào đó, tôi khuyên bạn nên thực hiện một cấu trúc dữ liệu như:
struct RangeData
{
int start;
int end;
void (*func)(int);
};
RangeData ranges[] = { { 1, 10, Handle10s },
{ 20, 30, Handle20s },
{5000, 10000, HandleBigNumbers} };
Sau đó, nó phải được rất dễ dàng để tạo ra một vòng lặp nhỏ mà chu kỳ thông qua, tìm thấy phạm vi thích hợp và gọi hàm thích hợp.
void DoNumber(int value)
{
for(int i=0; i<ARRAYSIZE(ranges); ++i)
{
if (ranges[i].start <= value && value <= ranges[i].end)
{
ranges[i].func(value);
}
}
}
Tùy chọn duy nhất của bạn là làm như bạn không muốn hoặc như pzaenger đề xuất. – Steve
Nếu bạn muốn một giải pháp không di động, gcc có thể sử dụng trường hợp dựa trên phạm vi. – Boiethios
Ý của bạn là '1 ... 10', không phải' '1' ... '10''. Và cấu trúc đó là phần mở rộng gcc, không phải là tiêu chuẩn C. –