2011-09-04 16 views
6
#include <stdlib.h> 

inline int f0(int a) { 
    return a*a; 
} 

inline int f1(int a) { 
    return a*a*a; 
} 

int main() { 
    int (*f)(int); 
    f = rand()%2 ? f0 : f1; 
    return f(rand()); 
} 

तो जीसीसी के साथ, एएसएम फ़ाइल जेनरेट की गई है या इनलाइन के बिना समान है। क्या फ़ंक्शन पॉइंटर्स वाले किसी भी कोड के साथ यह समान है?फ़ंक्शन पॉइंटर्स के माध्यम से उपयोग किए जाने वाले फ़ंक्शंस को रेखांकित किया जा सकता है?

+1

ध्यान दें कि जीसीसी सहित अधिकांश कंपाइलर्स वास्तव में आपकी इनलाइन इनलाइन की परवाह नहीं करते हैं, यह तय करते हैं कि वे कुछ इनलाइन करते हैं या नहीं। यह निश्चित रूप से इसे अनदेखा कर सकता है और मुझे आश्चर्य होगा कि 'इनलाइन' की उपस्थिति ने उस न्यायिक पर बहुत अधिक प्रभाव डाला था जो इसका निर्णय लेता है। – delnan

उत्तर

6

फ़ंक्शन पॉइंटर्स को तब तक रेखांकित नहीं किया जा सकता जब तक उनका मान संकलन समय पर पूरी तरह से निर्णायक न हो। आपका मामला निर्णायक नहीं है।

अधिकांश समय फ़ंक्शन पॉइंटर्स को कभी भी रेखांकित नहीं किया जाएगा, भले ही कंपाइलर फ़ंक्शन पॉइंटर में कौन सा फ़ंक्शन देख सके।

+1

मैं इनमें से अधिकांश से सहमत हूं। हालांकि, 'f0' और' f1' * * को यहां रेखांकित किया जा सकता है ('अगर (रैंड% 2) {/ * f0 * /} के लिए कोड {/ * f1 * /} के लिए कोड')। लेकिन मुझे संदेह है कि किसी भी कंपाइलर को इस तरह की चीज़ों को खोजने के लिए एक ह्युरिस्टिक होगा। –

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

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