2011-12-03 3 views
8

आकार कार्यावधि में निर्धारित के साथ ढेर पर एक सरणी बनाना जी के साथ ++ डिफ़ॉल्ट रूप से अनुमति दी है:क्या g ++ झंडे स्टैक कारण संकलक त्रुटि पर रनटाइम-आकार वाली सरणी बनाएंगे?

int size; 
cout << "Enter array size: " 
cin >> size; 
MyObject stack_array[size]; 

this question के अनुसार जवाब है, यह एक बुरा विचार है और मैं सहमत हूँ। जाहिर है, मैं सख्त/मानक सी ++ को लागू करने के लिए एक g ++ ध्वज का उपयोग करने और एक कंपाइलर त्रुटि प्राप्त करने में सक्षम होना चाहिए। कोड अभी भी निम्नलिखित झंडे के साथ संकलित करता है:

g++ -ansi -pedantic -Wall -Wextra -Werror -std=c++0x 

मैं इस कोड को संकलन से कैसे रोक सकता हूं?

यहाँ मेरी संस्करण जानकारी है:

g++ -v 
Using built-in specs. 
COLLECT_GCC=g++ 
COLLECT_LTO_WRAPPER=/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/lto-wrapper 
Target: i686-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=i386-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/i386-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/i386-linux-gnu --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu 
Thread model: posix 
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 
+2

जीसीसी के क्या संस्करण का उपयोग कर पर? – Hauleth

+0

संस्करण की जानकारी – Pete

+0

'-ansd' conflts '-std = C++ 0x' के साथ जोड़ा गया। सी ++ मोड '-ansi' में' -std = C++ 98' जैसा ही है। कोई जवाब नहीं है क्योंकि त्रुटि किसी भी मोड में उत्पन्न की जानी चाहिए। –

उत्तर

3

अपने कंप्यूटर (आर्क लिनक्स, जीसीसी 4.6.2) g++ -pedantic file.cpp रिटर्न

test.cpp: In function ‘int main()’: 
test.cpp:7:12: warning: ISO C++ forbids variable length array ‘arry’ [-Wvla] 
+0

-पैंटिक चेतावनी देता है; इसके अलावा - आतंक इसे संकलित करने से रोकता है। यह पता चला है कि मेरे मूल विकल्प काम करेंगे अगर मेरी मेकफ़ाइल वास्तव में उन विकल्पों का उपयोग करके स्रोत फ़ाइलों को संकलित कर रही थी (ओओएस)। जैसा कि यह निकला, उन विकल्पों का उपयोग केवल लिंक करने के लिए किया गया था। : ओ एक बार जब मैं मेकफ़ाइल तय करता हूं तो यह ठीक काम करता है। – Pete

5

अपने संकलक अपग्रेड करें (यह -Wvla ध्वज का समर्थन करने की जरूरत है, तो आप बदलाव में इसके लिए शिकार कर सकते हैं या सिर्फ 4.6.2 में नवीनीकृत)। 4.6 सही ढंग से अस्वीकार कर देंगे:

> g++ -std=c++0x -Wall -Werror -pedantic -o vla.exe vla.cpp 
vla.cpp: In function 'int main()': 
vla.cpp:3:19: error: ISO C++ forbids variable length array 'array' [-Werror=vla] 
vla.cpp:3:9: error: unused variable 'array' [-Werror=unused-variable] 
cc1plus.exe: all warnings being treated as errors 

इसके अलावा, -ansi-std=c++98 रूप में ही है, तो यह है कि झंडा उपयोग नहीं करते हैं अगर आप चाहते हैं सी ++ 11।

+0

संस्करण 4.4.4 मेरे लिए इस त्रुटि का सही ढंग से निदान करता है। –

+0

ठीक है, 4.6 तक अपग्रेड करना एक अच्छा विचार है, खासकर अगर आप सी ++ 11 चाहते हैं। –

+2

यह सच हो सकता है, लेकिन जब तक 4.5.2 में कोई विशिष्ट प्रतिगमन नहीं होता है, यह वास्तव में ओपी के मामले में त्रुटि की कमी की व्याख्या नहीं करता है। –

संबंधित मुद्दे