से C99-style array फ़ंक्शन हस्ताक्षर के साथ सबसे अच्छा कॉल कैसे करें I C++ में कुछ कोड लिख रहा हूं जिसे C99 में लिखी गई लाइब्रेरी को कॉल करने की आवश्यकता है। यह लाइब्रेरी अपने फ़ंक्शन पैरामीटर में static
कीवर्ड के साथ C99-style सरणी घोषणाओं का उपयोग करती है। यानी, जैसे:C++
void my_func(int n, int my_ints[static n]);
लेकिन, मेरा सी में इस पुस्तकालय के शीर्ष लेख ++ परियोजना, संकलक (बजना) सहित जब एक चेतावनी फेंकता है जब -pedantic
ध्वज का उपयोग:
> g++ -pedantic -c my_code.cpp
In file included from my_code.cpp:
./my_c_lib.h: warning: variable length arrays are a C99 feature [-Wvla-extension]
void my_func(int n, int my_ints[static n]);
क्या है इस मामले में सी पुस्तकालय को कॉल करने का सही/सर्वोत्तम तरीका? vla-extension
चेतावनी को बंद करने के अलावा, क्या इसके आसपास कुछ रास्ता है जिसमें पुस्तकालय के शीर्षलेखों को फिर से लिखना या इंटरमीडिएट सी रैपर लिखना शामिल नहीं है?
मिनिमल काम कर रहे उदाहरण:
extern "C" {
void my_func(int n, int my_ints[static n]);
}
int main()
{
int* some_ints = new int[10];
my_func(10, some_ints);
delete[] some_ints;
return 0;
}
क्या आपको '-pedantic' ध्वज का उपयोग करके संकलित करने की आवश्यकता है? यह ध्वज राज्यों की तरह है, यह आपको पैडेंटिक एएनएसआई मानकों का पालन करने के लिए मजबूर करने के लिए डिज़ाइन किया गया है, जो कि अधिक सख्त है, फिर केवल '-एएनएसआई' ध्वज, जो पहले से ही काफी सख्त है। एक सी 99 सुविधा का उपयोग करके आप पैडेंटिक मानकों को कोडिंग नहीं कर रहे हैं। –
@ जोइटमैन मैं पोर्टेबिलिटी ध्वज का उपयोग पोर्टेबिलिटी सुनिश्चित करने के लिए कर रहा हूं, लेकिन यह शीर्ष पर हो सकता है। वीएलए स्पष्ट रूप से एक सी 99 सुविधा है, और 'जी ++' सही तरीके से इसके लिए चेतावनी देता है - इसलिए मेरा प्रश्न। लाइब्रेरी को 'gcc -c -std = c99 -pedantic' का उपयोग करके संकलित किया गया है, जिस स्थिति में वीएलए ठीक होना चाहिए, है ना? –
आपको यह पता होना चाहिए कि आप वास्तव में किस प्लेटफॉर्म के लिए प्रोग्रामिंग कर रहे हैं) एक मानक के साथ ठीक रहें जो पिछले महीने 16 हो गया था और चार साल पहले बदल दिया गया था। यदि आप उस चरम पर पोर्टेबिलिटी के बारे में वास्तव में चिंतित हैं तो आपको मानक सी के साथ अपने सी 99 वीएलए को बदलना होगा। –