की इंटरऑपरेबिलिटी सी सी वैरिएडिक फ़ंक्शन घोषित करने और इसे फोरट्रान से कॉल करने का कोई तरीका है? मुझे स्ट्रिंग के साथ लेबल किए गए वैक्टरों के बीच कुछ डॉट उत्पादों की गणना करने के लिए इस फ़ंक्शन को कॉल करने की आवश्यकता है। मेरा विचार निम्न जैसा कुछ घोषित करना था, जहां तर्कों की परिवर्तनीय सूची में स्ट्रिंग अक्षर शामिल हैं। यदि तर्कों की परिवर्तनीय सूची खाली है, तो मैं मानक लेबल के बीच एक लुकअप करता हूं और गणना करता हूं। उपयोगकर्ता दो लेबल उल्लेख किया था तो मैं उन दो वैक्टर निकालते हैं और उनके डॉट उत्पाद मिलेगा: केवल समस्या यह है कि मैं अपने सी पुस्तकालय संकलन और एक फोरट्रान निष्पादन से लिंक कर सकते हैसी वैरिएडिक फ़ंक्शन और फोरट्रान
extern "C" void compute_dot_product(double * dot_product, ...)
{
va_list args;
va_start(args, NULL);
char * label1 = va_arg(args, char *);
if (!label1)
{
// Do standard label lookup and compute dot product
}
else
{
// Compute dot product between the vectors with the specified labels
char * label2 = va_arg(args, char *);
}
va_end(args);
}
, लेकिन मैं एक क्रम त्रुटि मिलती है जब मैं तर्कों की परिवर्तनीय सूची तक पहुंचने का प्रयास करता हूं। कोई विचार अगर मैं क्या करने की कोशिश कर रहा हूं तो संभव है? एक संभावित समाधान तब दो कार्यों में विभाजित किया जाएगा: एक मानक लेबल लुकअप (0 तर्क केस), जो गैर-मानक लेबल लुकअप (2 तर्क केस) को संभालता है। हालांकि मैं इस समाधान से बचूंगा।
इसे दोनों तरफ से सीडीसीएल के रूप में घोषित करने की आवश्यकता है। आपकी रनटाइम त्रुटि हो सकती है क्योंकि एक तरफ stdcall है और दूसरा cdecl है। – cup