Derleme vaqtida (T) bosib chiqarish hajmi

Mumkin bo'lgan ikki nusxadagi:    Mumkin bo'lganmi? kompilyatsiya vaqtida C ++ sinfining hajmini chop etish mumkinmi?

Ob'ektning o'lchamini kompilyatsiya vaqtida chiqarish mumkinmi? Derivat manba faylini kompilyatsiya qilganda bu ma'lumotga ega bo'lganligi uchun, men uni qaerdan topishim kerakligi haqida uzoq vaqt davomida emas, balki qarang (kompilyatsiya vaqtida) mening ilovamning konsolida yoki disk raskadrovka oynasida?

Ayniqsa, yirik loyihalarda ishlash vaqtida katta hajmdagi vaqtni tejashga imkon beradigan yagona manbali fayllarni kompilyatsiya qila olsam juda foydali bo'ladi.

8
Mutlaqo ikki nusxada, ammo savolning tergov shartlari umuman to'g'ri emas edi.
qo'shib qo'ydi muallif Samaursa, manba
Ko'plab kompilyatorlar tarkibida #pragma yoki derleme paytida qiymatlarni chiqarish uchun ishlatilishi mumkin bo'lgan boshqa direktif mavjud. Siz kompilyatorning hujjatlarini tekshirishingiz kerak. Afsuski, derazani ishlab chiqarishdan oldin ifodani baholash uchun qanday qilib olishni bilmayman.
qo'shib qo'ydi muallif Mark Ransom, manba
@ MichaelKrelin-hacker, nega bu boshqa savol? Menga xuddi shunday ko'rinadi.
qo'shib qo'ydi muallif Mark Ransom, manba
Samaursa, qidirishni topib olishni yomonlashtirmang va o'zingizni yopib qo'ymang. Turli xil tergov so'zlari bilan har qanday savollarga javob berish yaxshi, lekin hamma javoblarni bir joyda ko'rish yaxshi.
qo'shib qo'ydi muallif Mark Ransom, manba
Siz bu narsalarni qidiryapsizmi? stackoverflow.com/questions/2008398/…
qo'shib qo'ydi muallif wkl, manba
Yo'q, bu boshqa savol.
qo'shib qo'ydi muallif Michael Krelin - hacker, manba
Men javob bermayapman, chunki men to'liq ishonchim yo'q, lekin javobim yo'q.
qo'shib qo'ydi muallif Michael Krelin - hacker, manba
@MarkRansom, ikkita havola bor edi, men ishonaman va, ehtimol, boshqa o'lchovlarga ishora qildim, ya'ni o'lchamni aniqlash, uni ko'rsatmaslik. Men oxirgi gapimdan beri aqldan ozganim yo'q.
qo'shib qo'ydi muallif Michael Krelin - hacker, manba

1 javoblar

Ha. Mumkin bo'lgan ikki nusxadagi fayl hajmi xato xati sifatida yozishga imkon beradi, ya'ni derleme muvaffaqiyatli bo'lmaydi.

Biroq, mening o'lchamim o'lchamini ogohlantirish xabari sifatida yozishga majbur qiladi, ya'ni hajmini chop etadi va kompilyatsiya davom etadi.

template 
struct print_size_as_warning
{ 
   char operator()() { return N + 256; } //deliberately causing overflow
};

int main() {
        print_size_as_warning()();
        return 0;
}

Ogohlantirish xati:

prog.cpp: In member function ‘char print_size_as_warning::operator()() [with int N = 4]’:
prog.cpp:8:   instantiated from here
prog.cpp:4: warning: overflow in implicit constant conversion

Demo : http://www.ideone.com/m9eg3

Eslatma: ogohlantirish xabaridagi N qiymati sizeof (int) qiymatining hisoblanadi


Yuqoridagi kodning takomillashtirilishi va birinchi urinishim bu edi:

template 
struct _{ operator char() { return N+ 256; } }; //always overflow

int main() {
        char(_());
        return 0;
}

Ogohlantirish xati:

prog.cpp: In member function ‘_::operator char() [with int N = 4]’:
prog.cpp:5:   instantiated from here
prog.cpp:2: warning: overflow in implicit constant conversion

Demo : http://www.ideone.com/mhXjU

Fikr bu savolga oldingi javobimdan olingan:

19
qo'shib qo'ydi
Yaxshi, rahmat.
qo'shib qo'ydi muallif Samaursa, manba