Tôi đang viết C++ bằng trình biên dịch MinGW GNU và sự cố xảy ra khi tôi cố gắng sử dụng biến số nguyên được xác định bên ngoài như một trường hợp trong câu lệnh chuyển đổi. Tôi nhận được lỗi trình biên dịch sau đây: "nhãn trường hợp không giảm xuống hằng số nguyên".C++ Switch sẽ không biên dịch với biến được xác định bên ngoài được sử dụng như trường hợp
Bởi vì tôi đã xác định biến số nguyên như extern Tôi tin rằng nó nên biên dịch, không ai biết vấn đề có thể là gì?
Dưới đây là một ví dụ:
test.cpp
#include <iostream>
#include "x_def.h"
int main()
{
std::cout << "Main Entered" << std::endl;
switch(0)
{
case test_int:
std::cout << "Case X" << std::endl;
break;
default:
std::cout << "Case Default" << std::endl;
break;
}
return 0;
}
x_def.h
extern const int test_int;
x_def.cpp
const int test_int = 0;
Mã này sẽ biên dịch một cách chính xác trên Visual C++ 2008. Tiếp tục Một người bạn Montanan của tôi đã kiểm tra tiêu chuẩn ISO C++ và nó xuất hiện rằng bất kỳ biểu thức const-integer nào cũng hoạt động. Đây có phải là lỗi trình biên dịch hay tôi đã bỏ sót điều gì đó hiển nhiên?
Dưới đây là thông tin phiên bản trình biên dịch của tôi:
Reading specs from C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw-vista special r3)
Thú vị: một thực dụng và hai câu trả lời dựa trên tiêu chuẩn, tất cả từ những người có> đại diện 5K và câu trả lời dựa trên tiêu chuẩn không đồng ý. Methinks tiêu chuẩn không rõ ràng như nó có thể được. –
@David Thronley: Đó là niềm vui của tiêu chuẩn :). –
Tôi đang cố gắng để xác định sự liên quan của bạn của bạn là từ Montana. Montanans có nổi tiếng về việc giải thích các tiêu chuẩn không? –