powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C или C++
24 сообщений из 149, страница 6 из 6
C или C++
    #34164435
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoсмотрим асмовый код, сколько там у нас инициализаций?

Код: plaintext
1.
2.
3.
4.
    int i =  0 ;
    if( i== 0  )goto label_1;
    int a= 1 ;
label_1:  i = a;
...
Рейтинг: 0 / 0
C или C++
    #34164440
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к пред. сообщению: данный if и следовательно прыжок уводит от a=1, получаем случайное значение a

аффтопитезь
...
Рейтинг: 0 / 0
C или C++
    #34164448
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhЧестно, блин, почитай топик (это в первом листе, вроде)

честно.
читал.
...
Рейтинг: 0 / 0
C или C++
    #34164457
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo AkhДвойной инициализации произойти не может, т.к. определятся переменная может только один раз.
Код: plaintext
1.
2.
3.
	int b= 1 ;
z:
	int a= 1 ;
	if(b--)goto z;
даже не пикнул. Чего, смотрим асмовый код, сколько там у нас инициализаций?

замечу: переменная сидит в стеке, а в создании под нее отводится место. двойного отведения места нету.
a=1 выполнитться столько-то раз.
...
Рейтинг: 0 / 0
C или C++
    #34164466
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
паскриптум к пред. 4 сообщениям : gсс

аффтопитезь
...
Рейтинг: 0 / 0
C или C++
    #34164508
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin maXmo AkhДвойной инициализации произойти не может, т.к. определятся переменная может только один раз.
Код: plaintext
1.
2.
3.
	int b= 1 ;
z:
	int a= 1 ;
	if(b--)goto z;
даже не пикнул. Чего, смотрим асмовый код, сколько там у нас инициализаций?

замечу: переменная сидит в стеке, а в создании под нее отводится место. двойного отведения места нету.
a=1 выполнитться столько-то раз.

В этом контексте иницилизация - логическое создание переменной (классы - конструктор). Т.к. компилятор еррорит int b=1, а int b; b=1 пропускает, то по, всей видимости, причина такого поведения, именно в инициализации не по умолчанию.
Для скаляров, инициализация по умолчанию - ничего не делает, для классов, это, видимо, конструктор без параметров.
Можно, кстати, посмотреть, как поведет себя компилятор, если в использованных примерах с применением свича вместо int-а поставить какой-нибудь класс.
...
Рейтинг: 0 / 0
C или C++
    #34164574
акуз ЦИК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhВ этом контексте иницилизация - логическое создание переменной (классы - конструктор). Т.к. компилятор еррорит int b=1, а int b; b=1 пропускает, то по, всей видимости, причина такого поведения, именно в инициализации не по умолчанию.
Для скаляров, инициализация по умолчанию - ничего не делает, для классов, это, видимо, конструктор без параметров.
Можно, кстати, посмотреть, как поведет себя компилятор, если в использованных примерах с применением свича вместо int-а поставить какой-нибудь класс.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    int b= 1 ;
label_1:
    asm("nop");
    int a= 1 ;
    if(b--)goto label_1;

    int i;
    i = a;

по ходу ошибка была в отсутствии этого nop а, т.е. метка указывала на создание переменной, что делать нельзя.
...
Рейтинг: 0 / 0
C или C++
    #34166073
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
акуз ЦИК AkhВ этом контексте иницилизация - логическое создание переменной (классы - конструктор). Т.к. компилятор еррорит int b=1, а int b; b=1 пропускает, то по, всей видимости, причина такого поведения, именно в инициализации не по умолчанию.
Для скаляров, инициализация по умолчанию - ничего не делает, для классов, это, видимо, конструктор без параметров.
Можно, кстати, посмотреть, как поведет себя компилятор, если в использованных примерах с применением свича вместо int-а поставить какой-нибудь класс.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    int b= 1 ;
label_1:
    asm("nop");
    int a= 1 ;
    if(b--)goto label_1;

    int i;
    i = a;

по ходу ошибка была в отсутствии этого nop а, т.е. метка указывала на создание переменной, что делать нельзя.

Выделение памяти в стеке?
...
Рейтинг: 0 / 0
C или C++
    #34167971
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh акуз ЦИК
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    int b= 1 ;
label_1:
    asm("nop");
    int a= 1 ;
    if(b--)goto label_1;

    int i;
    i = a;

по ходу ошибка была в отсутствии этого nop а, т.е. метка указывала на создание переменной, что делать нельзя.

Выделение памяти в стеке?

что-нибудь вроде того, но! на этапе подготовки кода. а по заврешенпю онной строка удалилась, и как вывод, метка указала в пустоту.
другими словами, хоть в стеке место считается по коичеству int ов в коде, но указывать напрямую на инт низзя
...
Рейтинг: 0 / 0
C или C++
    #34169676
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklina=1 выполнитться столько-то раз.повезло, что тут инт, а если бы был класс?
...
Рейтинг: 0 / 0
C или C++
    #34170247
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo Aklina=1 выполнитться столько-то раз.повезло, что тут инт, а если бы был класс?

гм. скорее выполниться несколько раз перегруженный оператор "="
...
Рейтинг: 0 / 0
C или C++
    #34170260
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MyObj myobj(param1);
...
Рейтинг: 0 / 0
C или C++
    #34170346
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoMyObj myobj(param1);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream.h>

class aaa
{
public:
	aaa( int a )
	{
		cerr << a << "\n";
	}
	~aaa()
	{
		cerr << "D";
	}
};

void main()
{
    int b= 1 ;
	int i= 10 ;
label_1:
    __asm{nop}
    aaa a1( i++ );
    if(b--)goto label_1;
}

результат:

Код: plaintext
1.
 10 
D11D
...
Рейтинг: 0 / 0
C или C++
    #34170404
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хехе, однако...
...
Рейтинг: 0 / 0
C или C++
    #34170567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЙОПТ.. два деструктора! Рву на себе волосы! Топчу фсю литературу по программированию!
...
Рейтинг: 0 / 0
C или C++
    #34170658
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как его бишь зовут? Роллап стека?
...
Рейтинг: 0 / 0
C или C++
    #34172477
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoкак его бишь зовут? Роллап стека?
кого?
...
Рейтинг: 0 / 0
C или C++
    #34173796
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoкак его бишь зовут? Роллап стека?

Каллапсис? ;)
...
Рейтинг: 0 / 0
C или C++
    #34173798
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, вы что? Глюк нашли?
...
Рейтинг: 0 / 0
C или C++
    #34174096
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinкого?стека. Гоуту часто фачит стек, что мы и наблюли.
...
Рейтинг: 0 / 0
C или C++
    #34174325
rustem5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так все нормально ну немного не оптимизирован код а так
ведm 2 раза должен создаваться ааа
...
Рейтинг: 0 / 0
C или C++
    #34174518
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo Aklinкого?стека. Гоуту часто фачит стек, что мы и наблюли.

гм. а можно то же но по русски???
...
Рейтинг: 0 / 0
C или C++
    #34174951
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, вспомнил, называется stack unwinding. Если оператор goto пересекает границы областей видимости, он должен вычищать стек от временных переменных.
...
Рейтинг: 0 / 0
C или C++
    #34177988
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoо, вспомнил, называется stack unwinding. Если оператор goto пересекает границы областей видимости, он должен вычищать стек от временных переменных.

видимо сам гоуту сидит в ифе, а при вылезании из него, очищает класс...
...
Рейтинг: 0 / 0
24 сообщений из 149, страница 6 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / C или C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]