Tôi đã viết những vấn đề thử nghiệm nhỏ nhất có thể:MinGW g ++ không nhận off_t khi biên dịch với C++ 11
#include <sys/types.h>
int main(int argc, char** argv) {
off_t l = 0;
return 0;
}
Các công trình sau đây: g++ test.cpp
Nhưng nếu tôi cố gắng biên dịch với c + 11 tôi nhận được:
c: \ test> g ++ -std = C++ 11 test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:5:2: error: 'off_t' was not declared in this scope
test.cpp:5:8: error: expected ';' before 'l'
test.cpp:6:9: error: 'l' was not declared in this scope
Bất cứ ai cũng có thể giải thích tại sao điều này xảy ra? Lý do là làm phiền tôi là tôi đang cố gắng sử dụng thư viện zlib trong mã C++ 11 của tôi. Thư viện zlib.h sử dụng off_t rất nhiều.
phiên bản trình biên dịch của tôi là: gcc 4.7.2
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.7.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs -build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.7.2 (GCC)
khi tôi so sánh: 'g ++ -E test.cpp> test.c' &' g ++ -std = C++ 11 -E test.cpp> test.c' Tôi có thể thấy rằng không có C++ 11 Tôi có 'typedef long _off_t; ' ' typedef _off_t off_t; ' và với std = C++ 11 Tôi chỉ có' typedef long _off_t; ' – odedsh
Ok vậy là do __STRICT_ANSI__ được xác định khi sử dụng -std = C++ 11 Tôi có thể tìm ra từ đây – odedsh