निम्नलिखित कोड जीसीसी में क्लोज/सीटीजेड के लिए बिल्टिन फ़ंक्शंस को कॉल करता है और अन्य सिस्टम पर, सी संस्करण हैं। जाहिर है, सी संस्करण एक बिट सबोपेटिमल हैं यदि सिस्टम में बिल्टिन क्लोज/सीटीजेड निर्देश है, जैसे कि x86 और एआरएम।इस जीसीसी कोड के बराबर पाने के लिए एमएसवीसी इंट्रिनिक्स का उपयोग कैसे करें?
#ifdef __GNUC__
#define clz(x) __builtin_clz(x)
#define ctz(x) __builtin_ctz(x)
#else
static uint32_t ALWAYS_INLINE popcnt(uint32_t x)
{
x -= ((x >> 1) & 0x55555555);
x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
x = (((x >> 4) + x) & 0x0f0f0f0f);
x += (x >> 8);
x += (x >> 16);
return x & 0x0000003f;
}
static uint32_t ALWAYS_INLINE clz(uint32_t x)
{
x |= (x >> 1);
x |= (x >> 2);
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
return 32 - popcnt(x);
}
static uint32_t ALWAYS_INLINE ctz(uint32_t x)
{
return popcnt((x & -x) - 1);
}
#endif
क्या कार्यों मैं जो हेडर मैं यहाँ MSVC के लिए एक उचित ifdef जोड़ने के लिए शामिल करने की जरूरत है, आदि कॉल करने के लिए की आवश्यकता क्यों है? मैंने पहले से ही this page देखा है, लेकिन मुझे पूरी तरह से यकीन नहीं है कि #pragma क्या है (क्या यह आवश्यक है?) और संकलन के लिए एमएसवीसी संस्करण आवश्यकताओं पर क्या प्रतिबंध लगाते हैं। किसी ऐसे व्यक्ति के रूप में जो वास्तव में एमएसवीसी का उपयोग नहीं करता है, मुझे यह भी नहीं पता कि इन इंट्रिनिक्स में अन्य आर्किटेक्चर पर सी समकक्ष हैं या क्या मुझे #dedef x86/x86_64 के साथ-साथ # परिभाषित करना है।
पेज आप ऊपर का उल्लेख है, एक समारोह है कि .NET रनटाइम का हिस्सा है को संदर्भित करता है आप नेट के लिए या एक देशी विंडोज निष्पादन योग्य के रूप में अपने कार्यक्रम बनाने की कोशिश कर रहे हैं ? –
यह एक देशी विंडोज निष्पादन योग्य है - मैं जिस कारण से पूछ रहा हूं उसका एक हिस्सा यह है कि मुझे माइक्रोसॉफ्ट प्रलेखन पृष्ठों को खोजने में मुश्किल होती है जो वास्तव में इन दिनों सी के बारे में बात करते हैं। –
Libcxx कार्यान्वयन https://github.com/llvm-mirror/libcxx/blob/9dcbb46826fd4d29b1485f25e8986d36019a6dca/include/support/win32/support.h#L106-L182 – KindDragon