Может кто знает, как заставить компилер Visual C++ 2003 инициализировать все локальные строки кодом? Например, вот здесь: Код (Text): void myproc() { char buf[] = "string"; printf("%s\n",buf); } строка будет инициализирована так: Код (Text): _DATA SEGMENT $SG74453 DB 'string', 00H ... mov eax, DWORD PTR $SG74453 mov DWORD PTR _buf$[ebp], eax mov cx, WORD PTR $SG74453+4 mov WORD PTR _buf$[ebp+4], cx mov dl, BYTE PTR $SG74453+6 mov BYTE PTR _buf$[ebp+6], dl но если написать ту же строку через одинарные скобки: char buf[] = {'s','t','r','i','n','g',0}; то все данные проинициализируются "правильно": Код (Text): mov BYTE PTR _buf$[ebp], 115 ; 00000073H mov BYTE PTR _buf$[ebp+1], 116 ; 00000074H mov BYTE PTR _buf$[ebp+2], 114 ; 00000072H mov BYTE PTR _buf$[ebp+3], 105 ; 00000069H mov BYTE PTR _buf$[ebp+4], 110 ; 0000006eH mov BYTE PTR _buf$[ebp+5], 103 ; 00000067H mov BYTE PTR _buf$[ebp+6], 0 Можно ли как-то заставить компилер класть все текстовые строки сразу в стек, а не в секцию данных?
Наврятли. РЕгистры баваю же разные и я не думаю что в регистр ax влезет целая строка. т.е в него входит тока по символу.
>> РЕгистры баваю же разные и я не думаю что в регистр ax влезет целая строка. т.е в него входит тока по символу. причём здесь регистры, человеку нужно чтоб строка хранилась в стеке вместе с локальными переменными =) по сабжу: имхо, врядли... разве что какой-то макрос написать типа char str[] = INTO_STACK("shit"), чтоб он str инициализировал как {'s', 'h', 'i', 't', '\0'}, ито хз, реально ли...
Cr4sh Во-первых, стандартный препроцессор C++ поддерживает только тупую макроподстановку, поэтому такой макрос просто не напишешь. Во-вторых, это не решает проблемы со строками, которые инициализируются при вызове функций (например, myproc("mystring"). Пока я вижу только 2 выхода: или прогонять сорец перед компиляцией через свой собственный препроцессор, или искать другой компилятор.