2011-01-11 10 views
8

जीसीसी का उपयोग करना, क्या उन कार्यों का एक सेट निर्दिष्ट करना संभव है जो -फ्रेम-से-अधिक से मुक्त हैं? (उदाहरण के लिए, मुख्य।) इस उद्देश्य के लिए pragmas साथजीसीसी के साथ, क्या मैं प्रति-फ़ंक्शन आधार पर -फ्रेम-बड़े-अक्षम कर सकता हूं?

उत्तर

10

जीसीसी आपूर्ति आप:

http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

वर्तमान में यह बिल्कुल काम नहीं चलेगा कि आप क्या चाहते है, क्योंकि यह द्वारा एक फ़ाइल पर यह करने के लिए लगता है फ़ाइल आधार है, लेकिन जीसीसी (4.6) के अगले संस्करण में, ऐसा लगता है जैसे कि यह संदर्भ बारे में पता है:

http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas

+0

यह फ़ंक्शन-दर-फ़ंक्शन आधार पर काम कर सकता है। दस्तावेज़ों से: "जीसीसी प्रत्येक प्रज्ञा के स्थान का ट्रैक रखता है, और स्रोत फ़ाइल में उस बिंदु के रूप में राज्य के अनुसार निदान जारी करता है। इस प्रकार, रेखा के बाद होने वाली प्रगति उस रेखा के कारण निदान को प्रभावित नहीं करती है।" –

+2

@ करल: वास्तव में, वे दस्तावेज़ वर्तमान विकास संस्करण (4.6) के लिए हैं, इसलिए यदि आप मेरे द्वारा दिए गए लिंक की जांच करते हैं, तो यह 4.5 पर लागू नहीं होता है। –

+0

ओह ठीक है। मुझे वास्तव में उस दस्तावेज़ पर कोई संस्करण नहीं दिख रहा था। स्पष्टीकरण के लिए धन्यवाद। –

1

इसमें कुछ समय पुराना है, लेकिन मैं इसे भर में आया एक ही जवाब की तलाश में है, तो मैंने सोचा था कि मैं अपने समाधान (परीक्षण और त्रुटि के द्वारा पाया) पोस्ट चाहते हैं:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wframe-larger-than=" 

void func() 
{ int x[2000] = {}; printf("%d",x[1]); }  

#pragma GCC diagnostic pop 

काम करने के लिए लगता है। किसी कारण से, diagnostic warning का उपयोग करने का प्रयास नहीं किया गया। चेतावनी उत्पन्न करने वाले स्टैक आकार को बदलना संभव नहीं लगता है। इसके अलावा, आपको अंत में = की आवश्यकता है। शायद अगले आदमी को यह मिल जाएगा और खुद को कुछ समय बचाएगा :)। यह 4.6.2 है (एआरएम क्रॉस कंपाइलर पर)।

जॉन

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

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