संभव डुप्लिकेट:
Casting a function pointer to another typeसी में फंक्शन पॉइंटर कानूनी/परिभाषित के माध्यम से अतिरिक्त पैरामीटर पास कर रहा है?
मान लें मैं प्रारंभ एक समारोह है कि वास्तव में कम मानकों तो समारोह सूचक परिभाषा लेता है के साथ एक समारोह सूचक, समारोह अभी भी सही ढंग प्रदर्शन करेंगे, तो कहा जाता है के माध्यम से फंक्शन पॉइंटर?
मैं जीसीसी के साथ इस की कोशिश की और यह उम्मीद के रूप में काम किया, लेकिन मैं आश्चर्य है कि अगर उस व्यवहार के पार compilers/प्लेटफार्मों संगत (मैं कुछ वातावरण में संदेह है कि यह ढेर पर कहर ढ़ा हो सकता है) है:
#include <stdio.h>
typedef void (*myfun)(int, int, int);
void test_a(int x, int y, int z) {
printf("test_a %d %d %d\n", x, y, z);
}
void test_b(int x, int y) {
printf("test_b %d %d\n", x, y);
}
int main() {
myfun fp;
fp = test_a;
fp(1, 2, 3);
fp = (myfun) test_b;
fp(4, 5, 6);
}
यदि कैली क्लीन-अप का उपयोग किया जाता है तो यह भी क्रैश हो सकता है। –
मैं देखता हूं। पैरामीटर सूची के बिना फ़ंक्शन पॉइंटर प्रकार को परिभाषित करने के बारे में क्या, जैसे'typedef void (* myfun)() '। क्या संकलक को उस मामले में "दाएं" होने के लिए स्टैक पर पैरामीटर के आदेश की गारंटी देना चाहिए? – Askaga
@ बिलशास्का नहीं: आप जो चाहते हैं उसे "गारंटी" करने के लिए, आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि लक्ष्य फ़ंक्शन और आपका फ़ंक्शन पॉइंटर दोनों [सीडीईसी कॉलिंग कन्वेंशन] का उपयोग करें (http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl)। – ChrisW