मुझे पता है कि क्रमशः डीबगिंग और उत्पादन के लिए रनटाइम पर दावा सक्षम/अक्षम किया जा सकता है। हालांकि मैंने पाया कि दावे भी उत्पन्न बाइनरी के आकार को बढ़ाते हैं (नीचे दिए गए उदाहरण में लगभग 100-200 बाइट)।बिना किसी दावा के संकलन
सी और सी ++ में, हम इसे #include <assert.h>
से पहले संकलित समय पर कर सकते हैं।
जावा कंपाइलर के लिए स्वचालित रूप से ऐसा करने का कोई तरीका है? मैं उन्हें बाद में डीबगिंग उद्देश्यों के लिए स्रोत कोड में छोड़ना चाहता हूं। लेकिन मैं यह भी नहीं चाहता कि परिणामस्वरूप द्विआधारी आवश्यक से बड़ा हो (हमारे पास डिजाइन आवश्यकता के रूप में आकार सीमा है)।
सी कोड:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
जावा कोड:।
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
जवाब में अरब के जवाब:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
संपादित करें: वास्तव में, ऐसा लगता है मेरे लिए यह सक्षम/अक्षम करना एक अधिक उपयोगी संकलन-समय है रन-टाइम की तुलना में ई सुविधा। मेरा मतलब है, कितने अंत उपयोगकर्ता उन्हें सक्षम करेंगे? जहां तक एक प्रोग्रामर डीबग प्रक्रिया के दौरान चिंतित है, वैसे भी वह कोड को फिर से संकलित करेगा।
यह साबित नहीं करता है कि प्रत्येक assert 200 बाइट्स खर्च करता है, केवल वह करता है। – EJP
@EJP: निश्चित रूप से।मेरा मतलब यह था कि पूरी तरह से आवेषण के कारण एक गैर-लापरवाह वृद्धि हुई है। सटीक राशि निश्चित रूप से बयान की जटिलता पर निर्भर करती है। – tskuzzy
यदि आप ऐसी चीजों से परेशान हैं, तो आप गलत भाषा के साथ हैं। – lvella