Друк SizeOf (Т) падчас кампіляцыі

<Р> <моцны> Можна стварыць дублікат:
   Ці можна раздрукаваць памер класа C ++ падчас кампіляцыі?

Ці магу я вывесці памер аб'екта падчас кампіляцыі? Так як кампілятар ўжо мае гэтую інфармацыю, калі яна кампіляцыі зыходнага файла, можна см ён (падчас кампіляцыі), а не праз працяглы працэс вываду памер недзе у кансолі майго прыкладання або выхаднога вокны адладкі?

Гэта будзе вельмі карысна, асабліва, калі я магу скампіляваць адзінарныя зыходныя файлы, якія эканомяць мне велізарнае колькасць часу пры працы над буйнымі праектамі.

8
Вызначана дублікат, але ўмовы пошуку на пытанне, ці не супадае наогул.
дададзена аўтар Samaursa, крыніца
Многія кампілятары маюць #pragma або іншую дырэктыву, якая можа быць выкарыстана для вываду значэнняў падчас кампіляцыі. Вы павінны праверыць дакументацыю вашага кампілятара. На жаль, я не ведаю, як атрымаць кампілятар для вылічэнні выразы, перш чым яна фармуе выхадны сігнал.
дададзена аўтар Mark Ransom, крыніца
@ MichaelKrelin-хакер, чаму вы думаеце, гэта іншае пытанне? Яна выглядае сапраўды гэтак жа мне.
дададзена аўтар Mark Ransom, крыніца
Samaursa, не адчувае сябе дрэнна, ці не знайшоўшы яго праз пошук і ня прымае закрыццё асабіста. Гэта добрая рэч, каб мець розныя пытанні з рознымі ўмовамі пошуку, але гэта таксама добра мець адказы на ўсе пытанні ў адным месцы.
дададзена аўтар Mark Ransom, крыніца
Гэта тое, што вы шукаеце? stackoverflow.com/questions/2008398/…
дададзена аўтар wkl, крыніца
Не, гэта іншае пытанне.
дададзена аўтар Michael Krelin - hacker, крыніца
Я не адказаў, таму што я не зусім упэўнены, але я думаю, што адказ не.
дададзена аўтар Michael Krelin - hacker, крыніца
@MarkRansom, там былі дзве спасылкі, я лічу, і, напэўна, я меў на ўвазе іншы цьмяны, што было пра вызначэнні памеру, не адлюстроўваючы яго. Пакуль я не сышоў з розуму, так як мой апошні каментар.
дададзена аўтар Michael Krelin - hacker, крыніца

1 адказы

Так. Магчымыя дублікаты друкуе памер як Памылка паведамленні, што азначае кампіляцыю не атрымаецца.

Тым не менш, маё рашэнне друкуе памер як Увага паведамленне, якое азначае, што ён будзе друкаваць памер, і кампіляцыя будзе працягвацца.

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

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

Папярэджанне паведамлення:

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

<Моцны> Заўвага: значэнне N ў паведамленні папярэджання з'яўляецца значэнне SizeOf (INT)


Прыведзены вышэй код палепшаны адзін, і мая першая спроба была такая:

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

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

Папярэджанне паведамлення:

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

Ідэя ўзятая з майго папярэдняга адказу на гэтае пытанне:

Выдатна, дзякуй.
дададзена аўтар Samaursa, крыніца