मैं एफएफटीडब्ल्यू (पश्चिम में सबसे तेज फूरियर ट्रांसफॉर्म) पर काम कर रहा हूं और इस सी समारोह में आया हूं। मुझे इस फ़ंक्शन की घोषणा समझ में नहीं आई जहां पैरामीटर ()() के अंदर मौजूद हैं। मैंने कभी इस तरह की घोषणा नहीं देखी। क्या कोई इसे संक्षिप्त कर सकता है?

void X(execute_dft_r2c)(const X(plan) p, R *in, C *out)
    {
      /*
       *Body
       */
    }
c++ c
2
aditya palavajjhala 20 पद 2019, 12:40
10
C या C++, कृपया कोई एक चुनें। ये दो अलग-अलग भाषाएं हैं। यह विशेष रूप से आश्चर्यजनक है कि आपने विशिष्ट C++14 संस्करण को चुना लेकिन केवल C के बारे में बात कर रहे हैं। किसी संस्करण को टैग न करें, यदि आप उस संस्करण के बारे में नहीं पूछ रहे हैं या विशेष रूप से उपयोग नहीं कर रहे हैं।
 – 
walnut
20 पद 2019, 12:41
क्या आप इस फ़ंक्शन के साथ C या C++ प्रोग्राम/सोर्स कोड में काम कर रहे हैं?
 – 
RobertS supports Monica Cellio
20 पद 2019, 12:43
8
क्या उस स्रोत फ़ाइल में परिभाषित कोई मैक्रोज़ है (जैसे कि शायद एक नाम X?)
 – 
David C. Rankin
20 पद 2019, 12:45
1
हाँ, मैं सोच रहा था कि X एक मैक्रो था जिसका नाम मैंगलिंग या कुछ और था
 – 
Indiana Kernick
20 पद 2019, 12:45
4
फ़ंक्शन परिभाषा यहां मिली और मैक्रो परिभाषा यहां। मुझे ओपन सोर्स पसंद है!
 – 
Indiana Kernick
20 पद 2019, 12:54

1 उत्तर

सबसे बढ़िया उत्तर

X एक मैक्रो है जो संकलन मापदंडों के आधार पर एक सटीक-नामकरण उपसर्ग जोड़ता है।

मेरा मानना ​​​​है कि बिंदु (उनमें से कम से कम एक) त्रुटियों के कारण बेमेल से बचने के लिए है यदि स्रोत फ़ाइलों को विभिन्न सटीक सेटिंग्स के साथ संकलित किया गया है।
(सी में टाइप-सेफ लिंकेज नहीं है।)

fftw3/kernel/ifftw.h में देखें। :

/* determine precision and name-mangling scheme */
#define CONCAT(prefix, name) prefix ## name
#if defined(FFTW_SINGLE)
  typedef float R;
# define X(name) CONCAT(fftwf_, name)
#elif defined(FFTW_LDOUBLE)
  typedef long double R;
# define X(name) CONCAT(fftwl_, name)
# define TRIGREAL_IS_LONG_DOUBLE
#elif defined(FFTW_QUAD)
  typedef __float128 R;
# define X(name) CONCAT(fftwq_, name)
# define TRIGREAL_IS_QUAD
#else
  typedef double R;
# define X(name) CONCAT(fftw_, name)
#endif

पहले मामले में, आपकी घोषणा का विस्तार होता है

void fftwf_execute_dft_r2c(const fftwf_plan p, R *in, C *out)
8
molbdnilo 20 पद 2019, 13:00