Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Глобальные переменные

Автор RawonaM, марта 1, 2011, 15:07

0 Пользователи и 1 гость просматривают эту тему.

RawonaM

Цитата: myst от марта  1, 2011, 16:37
Не, ну ты можешь на пальцах объяснить логику. :)
А что там непонятного еще?? При выходе вызывается safe_exit() (устанавливается atexit-ом, например), он все и освобождает.

myst

Интерфейс определён заданием, или ты его сделал по аналогии со стандартными функциями?

Python

В коде не хватает инклудов. Если используется realloc, то должен быть как минимум #include <stdlib.h> (либо инклуд, ссылающийся на него, например, stdio.h).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

RawonaM

Цитата: myst от марта  1, 2011, 16:36
При чём тут теория, если речь о конкретных вещах?
На уровне сишных объектников нет никакой защиты, она там просто не нужна. Поэтому фантазии о дырках в защите на этом уровне очень юмористичны.
-1. Теория — это теория. Можно создать сишные объектники с защитой, никто не запрещает.

RawonaM

Цитата: Python от марта  1, 2011, 16:44
В коде не хватает инклудов. Если используется realloc, то должен быть как минимум #include <stdlib.h> (либо инклуд, ссылающийся на него, например, stdio.h).
Это отрывок кода.

Python

Цитата: myst от марта  1, 2011, 16:27
Если у тебя есть доступ к исходникам или объектникам, ты можешь любую переменную сделать глобальной при желании. Смекаешь? :)
С исходниками понятно, а как это проделать с объектниками? Нас такому не учили :(
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

RawonaM

Код рабочий, уже давно все написано, скомпайлено, отлажено и сдано, поэтому искать там ошибки компиляции не надо.

myst

Цитата: RawonaM от марта  1, 2011, 16:44
-1. Теория — это теория. Можно создать сишные объектники с защитой, никто не запрещает.
В каком месте это защита? :o

RawonaM

Цитата: myst от марта  1, 2011, 16:43
Интерфейс определён заданием, или ты его сделал по аналогии со стандартными функциями?
В задании вообще ничего об этом нет. Задание было — написать С-препроцессор.
Просто я задолбался писать f = malloc... if (f==null) {кучу действий...} и так 40 раз на 5 квадратных строк.
Решил раз и навсегда покончить с этим, написать такого рода мусорщика. С тех пор присоединяю его к каждой программе и не мучаюсь :)

myst

Короче, эти переменные спрятать, конечно, можно, но я бы их просто статиками объявил, ибо keep it simple, stupid. Если я всё правильно понял.

myst

Цитата: RawonaM от марта  1, 2011, 16:48
Цитата: myst от марта  1, 2011, 16:43
Интерфейс определён заданием, или ты его сделал по аналогии со стандартными функциями?
В задании вообще ничего об этом нет. Задание было — написать С-препроцессор.
Просто я задолбался писать f = malloc... if (f==null) {кучу действий...} и так 40 раз на 5 квадратных строк.
Решил раз и навсегда покончить с этим, написать такого рода мусорщика. С тех пор присоединяю его к каждой программе и не мучаюсь :)
Может, им вообще твоя самодеятельность не понравилась. Может, освобождать память только перед самым выходом не есть гуд, я не знаю.

RawonaM

Цитата: myst от марта  1, 2011, 16:49
Короче, эти переменные спрятать, конечно, можно, но я бы их просто статиками объявил, ибо keep it simple, stupid. Если я всё правильно понял.
Статики в смысле глобал-статик? Я вообще не понимаю, зачем к ним слово статик примешали, не надо путать.

RawonaM

Цитата: myst от марта  1, 2011, 16:52
Может, им вообще твоя самодеятельность не понравилась. Может, освобождать память только перед самым выходом не есть гуд, я не знаю.
Нет, с этим не было проблем. Да и я освобождаю ее как обычно, только на выходе при ошибках все сразу освобождается и баги таким образом можно выцедить (вставлется в safe_exit проверка и выдается предупреждение, что не вся память освобождена).
Просто каждый раз когда открываешь файл или запрашиваешь память, есть шанс, что тебе откажут, каким образом можно освободить всю память и выйти из программы с сообщением об ошибке? Что бы с этим не заморачиваться, я так сделал.

RawonaM


Чайник777

Всё-таки тема теории защиты не раскрыта :(
Я такого не слышал (впрочем и си я никогда не изучал)
DAZU brauchte Hitler 12 Jahre Zeit.

myst

Цитата: RawonaM от марта  1, 2011, 16:53
Статики в смысле глобал-статик? Я вообще не понимаю, зачем к ним слово статик примешали, не надо путать.
Не распарсил последнее предложение. Короче, модификатор static надо было к глобальным переменным приписать. К вспомогательным функциями, которые используются только в данном модуле, тоже надо его приписывать, чтобы их область видимости не была шире необходимого.

Python

К стати, при желании safe_realloc  и safe_malloc можно объединить в одну функцию и вместо safe_malloс(size) вызывать safe_realloc(NULL, size). Впрочем, особого смысла в этом нет.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

myst

Цитата: Чайник777 от марта  1, 2011, 16:59
Всё-таки тема теории защиты не раскрыта :(
Я такого не слышал (впрочем и си я никогда не изучал)
Как не раскрыта? Я же сказал, защиты на уровне объектников нет и никогда не было. Там некого и не от кого защищать. Это детали для сборки программы. Программисту нет необходимости в свою программу чего-то там нелегально внедрять, если у него не раздвоение личности, конечно.

RawonaM

Цитата: Чайник777 от марта  1, 2011, 16:59
Всё-таки тема теории защиты не раскрыта :(
Я такого не слышал (впрочем и си я никогда не изучал)
Это дело не только в Си, возьмите любой современный язык и подумайте, зачем нужны private мемберы. То же самое и static для глобалов в С.

Цитата: myst от марта  1, 2011, 17:00
Короче, модификатор static надо было к глобальным переменным приписать.
С этим я согласен, но замечание проверяющего я понял совсем не так. Имхо, не этого они хотели.

Цитата: myst от марта  1, 2011, 17:00
ЦитироватьЯ вообще не понимаю, зачем к ним слово статик примешали, не надо путать.
Не распарсил последнее предложение.
static — это переменная, которая не automatic, т.е. не меняется каждый раз при входе в функцию. По сути это глобальная переменная, которая видна только в этой функции.
Все определенные вне функций переменные - статические по определению. Слово static для глобалов в качестве ~private — дурацкая метонимия.

RawonaM

Цитата: myst от марта  1, 2011, 17:04
Как не раскрыта? Я же сказал, защиты на уровне объектников нет и никогда не было. Там некого и не от кого защищать.
Ты же сам предложил объектник поменять! От тебя и защищать.

RawonaM

Если ты обещаешь в объектники не лазить, то static от твоих изменений защитит.

Чайник777

Цитата: RawonaM от марта  1, 2011, 17:06
возьмите любой современный язык и подумайте, зачем нужны private мемберы. То же самое и static для глобалов в С.
Я думаю, врядли для того, о чём писал Python.
DAZU brauchte Hitler 12 Jahre Zeit.

RawonaM

Цитата: Python от марта  1, 2011, 17:02
К стати, при желании safe_realloc  и safe_malloc можно объединить в одну функцию и вместо safe_malloс(size) вызывать safe_realloc(NULL, size). Впрочем, особого смысла в этом нет.
Так они же по аналогии с malloc и realloc. 100% совместимые. Можно сделать для любой программы #define malloc safe_malloc и задебагировать, мой код выдаст все ошибки неосвобождения памяти.


myst

Цитата: RawonaM от марта  1, 2011, 17:06
static — это переменная, которая не automatic, т.е. не меняется каждый раз при входе в функцию. По сути это глобальная переменная, которая видна только в этой функции.
Все определенные вне функций переменные - статические по определению. Слово static для глобалов в качестве ~private — дурацкая метонимия.
А, вот ты про что. Это они ключевые слова сэкономили. :)

RawonaM

Цитата: Чайник777 от марта  1, 2011, 17:09
Цитироватьвозьмите любой современный язык и подумайте, зачем нужны private мемберы. То же самое и static для глобалов в С.
Я думаю, врядли для того, о чём писал Python.
Именно для того.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр