Помогите Исправить Ошибки в Программе
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Airhand, я так и не осилил понять, что ты от меня хочешь.
Я от тебя хочу очень простую вещь: приведи пример того, как по-твоему компилятор "неверно" понимает твой код.BBB писал(а):Airhand, я так и не осилил понять, что ты от меня хочешь.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
Например, если бы в описанной мной ситуации. Объявлен статический экземпляр класса, но, когда программа запустится, окажется, что никакого экземпляра вообще нет, а нужный мне код, находящийся в конструкторе этого каласса, не выполняется.Airhand писал(а):Я от тебя хочу очень простую вещь: приведи пример того, как по-твоему компилятор "неверно" понимает твой код.
Только, думается мне, что если такое произойдет, то это будут фокусы некомпилятора (дело которого, собственно скомпилировать данные ему текст в машинные коды), а линкера.
Я просил пример того, как действия с членами класса не позволяют что-то сделать и обращения во вне нет. Я писал:BBB писал(а):Например, если бы в описанной мной ситуации. Объявлен статический экземпляр класса, но, когда программа запустится, окажется, что никакого экземпляра вообще нет, а нужный мне код, находящийся в конструкторе этого каласса, не выполняется.
Объясни , где тут указания на функции не члены класса. Я, наверное, не чётко выразился: не должно быть любого обращение к наруже класса, т.е. функций-не членов класса и вызываемых внутри функций-членов "внешних" функций. Твой пример не подходит.Airhand писал(а):если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального обращения.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
Вообще-то, в самой последней "просьбе" содержалось вот это:Airhand писал(а):Я просил пример того, как действия с членами класса не позволяют что-то сделать и обращения во вне нет.
"приведи пример того, как по-твоему компилятор "неверно" понимает твой код."
А вообще говоря, утомил ты уже. Теоретизировать на тему "как бы мог выглядеть плохой компилятор" мне, признаться, совершенно неинтересно.
Не можешь привести пример. А как выпендривался. Съезжаешь на то, что это дескать - неинтересно. А когда начинал спор это было интересно ?BBB писал(а): А вообще говоря, утомил ты уже. Теоретизировать на тему "как бы мог выглядеть плохой компилятор" мне, признаться, совершенно неинтересно.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
Airhand, "на слабо уже не сорок не ведусь" (c)
))

Не совсем правы оба. При объявлении статического экземпляра конструктор вызывается, но при динамическом выделении памяти под экземляр с посмощью malloc, calloc, или realloc не вызывается. Так как один говорит о выделении памяти, а другой об объявлении экземпляра, то если ваши высказывания раздлить по разным темам, то будете правы оба. Обоюдная ошибка в том, что пытаетесь спорить, не потрудившись понять друг друга.Airhand писал(а):BBB
Да, я ошибся на счёт того, что в классах инты зануляются, но ты тоже неправ, когда говоришь: Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
В стандарте такого нет и врядли будет. Но отложенная компиляция все таки не вымысел. Некоторые компиляторы пытаются таким образом оптимизировать сам процесс компиляции, вставляя вызов конструктора непосредственно перед первым обращением к обекту, отличным от его декларации. Но и в этом случае для объявленного статического экземпляра гарантированно вызывается конструктор. Так что не имеет занчения, отложенная у тебя компиляция, или обычная, результат будет одни. Меняется лишь относительный порядок тех операций, порядок которых произволен по смыслу исходника. сравните:" писал(а):отложенная компиляция
Первый раз о таком слышу и ни разу не видел в стандарте.
Код: Выделить всё
int a;
int b;
int c;
a=2;
b=23;
c=a+b;
Код: Выделить всё
int a;
int b;
int c;
b=23;
a=2;
c=a+b;
Разве это бочка на старые компиляторы? Читать научись. BBB как раз пишет, что старый компилятор его вполне устраивает." писал(а):Твои слова:
Эээ... MS VC 6.0 компилил так, что меня вполне устраивало, и, более того, казалось логичным с точки зрения здравой логики. Т.е. он компилил вполне, "как я хочу"
Могу привести пример компилятора вообще конца 80-х, который компилил не так, как я хочу. Бейсик-компилятор Blast. Он компилил проги, которые умудрялись на построение поверхности тратить 26 минут. Тот же исходник на той же машине, но интерпретированный встроенным в zx spectrum (так она называлась) интерпретатором тратил на построение тойже поверхности 23 минуты. 3 лишних минуты - это явные тормоза внесённые компилятором. Конечно, такая компиляция меня не устроила.
А если компилятор не правильно понимает чей-то код (а это очень даже распростанённое явление), то причина этого - ошибка в самом коде по причине плохого знания языка разработчиком данного кода. Тогда учи язык, и оставь в покое его компиляторы.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ты не понял о чём спор и уже подпрягаешся.atavin-ta писал(а):Не совсем правы оба. При объявлении статического экземпляра конструктор вызывается, но при динамическом выделении памяти под экземляр с посмощью malloc, calloc, или realloc не вызывается. Так как один говорит о выделении памяти, а другой об объявлении экземпляра, то если ваши высказывания раздлить по разным темам, то будете правы оба. Обоюдная ошибка в том, что пытаетесь спорить, не потрудившись понять друг друга.
Сам читать научись. Мы спорили о том, что ВВВ говорит будто не сушествует отложеной компиляции, а я говорю, что существует.Разве это бочка на старые компиляторы? Читать научись.
Не переходи на личности. Это приводит к демагогии и является очень слабым аргументом в споре.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Гварды, это классы, которые делают в конструкторе некие действия, а в деструкторе делают действия обратные действиям конструктора. Образовывайся понемногу, книжки читай." писал(а):Изъясняйся яснее. Что ты имееш ввиду под гвардами ? Если стражи включения, то там работает препроцессор.
Вот пример гварда:
Код: Выделить всё
class CCOMInitializerGuard
{
public:
CCOMInitializerGuard()
{
::CoInitialize(NULL);
}
~CCOMInitializerGuard()
{
::CoUninitialize();
}
};
void main()
{
CCOMInitializerGuard comGuard;
// Any action that needs COM to be initialized
_bstr_t bstrString = OLESTR("OLE string");
std::cout << bstrString << std::endl;
}
1. Он нарушит стандарт.
2. Он разломает идеологию гвардов, которая родилась ещё на заре С++.
3. Он разломает мой код и я буду в ярости.

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.