информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Ну вот, дальше — больше. Ещё вопросы из серии тупых, но на этот раз чуточку поумнее. Pls, help... 01.02.03 23:23  Число просмотров: 1354
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Тут столкнулся с тривиальной задачей, нужно «пулять» целочисленные значения по разным ветвям обработки, тривиальный case в Паскале справился бы на-ура. А вот в сях... switch - case какой-то слабоватый. Итак, пример на Паскале ниже и вопрос в том, как это лучше всего реализовать в С:
Case MyIntegerValue of 
  0..15: DoSomthingCool(MyIntegerValue);
  16, 18, 24: DoNextCoolThing(MyIntegerValue);
  26..89, 90, 95, 101..170: VeryNiceAndCool(MyIntegerValue);
End;

---
Здесь паскальный Case во всей своей красе — выбор из диапазона, из дискретных значений (что возможно и в сяшной паре switch - case), и в последней строке выбора есть диапазоны и дискретные значения. Неужели прийдётся строить if - else?

Ну а теперь про множества. Это немного соотносится с case.
if MyChar in ['A'..'Z', 'a'..'z'] then DoSomthing — как это сделать попроще?
Я понимаю, что можно так:
if (((MyChar >= "A") && (MyChar <= "Z"))|((MyChar >= "a") && (MyChar <= "z")))
DoSomething();
но это как-то некрасиво.

Ну и потяжелее пример с типом «множество»...
Type
  TDigit = (zero, one, two, three, four, five, six, seven, eight, nine);
  TDigits = Set Of TDigit;
Var Digits: TDigits;
Begin
  Digits := [zero..two, four..six];
  Include(Digits, three);
  Digits := Digits + [seven..nine];
  // Ну и  в таком духе — операции со множествами.
End;

---
Я понимаю, для процессора это всего-навсего возня с битами в целочисленных значениях. Меня не испугает никакой язык, если в нём есть операции or, and, xor и прочяя... Но возможно, не надо изобретать колесо и есть уже что-то в самом языке?

Теперь ещё. Была у меня раньше мечта — повозится в ядре драйвером ;-) Delphi для этого не самый лучший инструмент, посколько он для этого не предназначен и включает даже в самую маленькую программу кучу инициализирующего дерьма с вызовом функций из библиотек пользовательского режима. Скажу даже, что за C я взялся, тайно движимый «ядерной» мечтою ;-) Но, наверное, взялся не за тот компилер, а именно за борландовсий С. И что я вижу — программа, которая «ничего не делает» — а именно, входит в Main и выходит из неё, без единого #include занимает 7 с лишним килобайт и выполняет кучу дерьма пользовательского режима при старте. С этим можно как-то побороться, или мне нужен другой компилятор?
Ещё в PE-заголовке драйверов выставляется флаг NATIVE subsystem, это как делается?

Заранее всем большое спасибо, надеюсь что не утомил.
<programming>
[C++] Тут я вот за этот язык взялся ;-) После Delphi дискомфорт ужасный, всё как-то через %опу ;-) Есть тупой вопрос про инкремент ;-) 30.01.03 11:20   [vh, йцукенг, Ktirf, Step, HandleX]
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Вопрос: есть ли в этом великом и могучем языке операция целочисленного инкремента на определённое значение? Насколько я понял MyVar++ увеличивает MyVar на единицу, а если мне надо на 30? Вот в паскале я бы написал Inc(MyVar, 30) а в сях пишу как идиот MyVar = MyVar + 30
Код неоптимизированный получается ;-)
[C++] Тут я вот за этот язык взялся ;-) После Delphi дискомфорт ужасный, всё как-то через %опу ;-) Есть тупой вопрос про инкремент ;-) 07.02.03 07:34  
Автор: elgato Статус: Незарегистрированный пользователь
<"чистая" ссылка> <обсуждение закрыто>
> Вопрос: есть ли в этом великом и могучем языке операция
> целочисленного инкремента на определённое значение?
> Насколько я понял MyVar++ увеличивает MyVar на единицу, а
> если мне надо на 30? Вот в паскале я бы написал Inc(MyVar,
> 30) а в сях пишу как идиот MyVar = MyVar + 30
> Код неоптимизированный получается ;-)
MyVar+=30; // Документацию читать надо.
[C++] Тут я вот за этот язык взялся ;-) После Delphi дискомфорт ужасный, всё как-то через %опу ;-) Есть тупой вопрос про инкремент ;-) 05.02.03 19:41  
Автор: SawJ Статус: Незарегистрированный пользователь
Отредактировано 05.02.03 19:44  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> Вопрос: есть ли в этом великом и могучем языке операция
> целочисленного инкремента на определённое значение?
> Насколько я понял MyVar++ увеличивает MyVar на единицу, а
> если мне надо на 30? Вот в паскале я бы написал Inc(MyVar,
> 30) а в сях пишу как идиот MyVar = MyVar + 30
> Код неоптимизированный получается ;-)

Да ладно ты, мелочи ... же! Ну вот так мохно MyVar+=30
Я тя кстати очень хорошо понимаю (переход с Делфи на С) сам такой! По началу жуДь, ща на Дельфе сидеть вообще не могу, привык!
просьбы такие темы поднимать на борде Misc. А еще лучше - сразу в scrap. 04.02.03 13:30  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Скорее уж в beginners 04.02.03 13:39  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Изначальный вопрос был задан вполне для beginners, хотя почему-то обитатели programming его туда не отправили. Ну а флейм, который дальше пошел - увы...
[C++] Ну вот, дальше — больше. Ещё вопросы из серии тупых, но на этот раз чуточку поумнее. Pls, help... 01.02.03 23:23  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Тут столкнулся с тривиальной задачей, нужно «пулять» целочисленные значения по разным ветвям обработки, тривиальный case в Паскале справился бы на-ура. А вот в сях... switch - case какой-то слабоватый. Итак, пример на Паскале ниже и вопрос в том, как это лучше всего реализовать в С:
Case MyIntegerValue of 
  0..15: DoSomthingCool(MyIntegerValue);
  16, 18, 24: DoNextCoolThing(MyIntegerValue);
  26..89, 90, 95, 101..170: VeryNiceAndCool(MyIntegerValue);
End;

---
Здесь паскальный Case во всей своей красе — выбор из диапазона, из дискретных значений (что возможно и в сяшной паре switch - case), и в последней строке выбора есть диапазоны и дискретные значения. Неужели прийдётся строить if - else?

Ну а теперь про множества. Это немного соотносится с case.
if MyChar in ['A'..'Z', 'a'..'z'] then DoSomthing — как это сделать попроще?
Я понимаю, что можно так:
if (((MyChar >= "A") && (MyChar <= "Z"))|((MyChar >= "a") && (MyChar <= "z")))
DoSomething();
но это как-то некрасиво.

Ну и потяжелее пример с типом «множество»...
Type
  TDigit = (zero, one, two, three, four, five, six, seven, eight, nine);
  TDigits = Set Of TDigit;
Var Digits: TDigits;
Begin
  Digits := [zero..two, four..six];
  Include(Digits, three);
  Digits := Digits + [seven..nine];
  // Ну и  в таком духе — операции со множествами.
End;

---
Я понимаю, для процессора это всего-навсего возня с битами в целочисленных значениях. Меня не испугает никакой язык, если в нём есть операции or, and, xor и прочяя... Но возможно, не надо изобретать колесо и есть уже что-то в самом языке?

Теперь ещё. Была у меня раньше мечта — повозится в ядре драйвером ;-) Delphi для этого не самый лучший инструмент, посколько он для этого не предназначен и включает даже в самую маленькую программу кучу инициализирующего дерьма с вызовом функций из библиотек пользовательского режима. Скажу даже, что за C я взялся, тайно движимый «ядерной» мечтою ;-) Но, наверное, взялся не за тот компилер, а именно за борландовсий С. И что я вижу — программа, которая «ничего не делает» — а именно, входит в Main и выходит из неё, без единого #include занимает 7 с лишним килобайт и выполняет кучу дерьма пользовательского режима при старте. С этим можно как-то побороться, или мне нужен другой компилятор?
Ещё в PE-заголовке драйверов выставляется флаг NATIVE subsystem, это как делается?

Заранее всем большое спасибо, надеюсь что не утомил.
[C++] Всем спасибо, приятно что многие «болеют» за C... 03.02.03 05:32  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
[C++] Ну вот, дальше — больше. Ещё вопросы из серии тупых, но на этот раз чуточку поумнее. Pls, help... 02.02.03 01:37  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <обсуждение закрыто>
> Тут столкнулся с тривиальной задачей, нужно «пулять»
> целочисленные значения по разным ветвям обработки,
> тривиальный case в Паскале справился бы на-ура. А вот в
> сях... switch - case какой-то слабоватый. Итак, пример на
> Паскале ниже и вопрос в том, как это лучше всего
> реализовать в С:
>
Case MyIntegerValue of >   0..15: DoSomthingCool(MyIntegerValue);
>   16, 18, 24: DoNextCoolThing(MyIntegerValue);
>   26..89, 90, 95, 101..170:
> VeryNiceAndCool(MyIntegerValue);
> End;

---
> Здесь паскальный Case во всей своей красе — выбор из
> диапазона, из дискретных значений (что возможно и в сяшной
> паре switch - case), и в последней строке выбора есть
> диапазоны и дискретные значения. Неужели прийдётся строить
> if - else?

Да, в С/С++ switch простой, без диапазонов, только на сравнение с константой. В любом случае сложный паскалевский case с диапазоном развернется в такую же проверку. Часто, кстати, используется вариант с поиском по предварительно заполненной таблице.

> Ну а теперь про множества. Это немного соотносится с case.
> if MyChar in ['A'..'Z', 'a'..'z'] then DoSomthing — как это
> сделать попроще?
> Я понимаю, что можно так:
> if (((MyChar >= "A") && (MyChar <= "Z"))|((MyChar
> >= "a") && (MyChar <= "z")))
> DoSomething();
> но это как-то некрасиво.

Конкретно эта задача - проверка символа на попадание в диапазон a-zA-Z обычно решается с помощью функции isalpha, для чисел - isdigit, плюс еще несколько аналогичных функций, которые, насколько я помню, реализованы не как толпа if, а как поиск по таблице. Про множества в чистом виде - ниже.

> Ну и потяжелее пример с типом «множество»...
>
Type>   TDigit = (zero, one, two, three, four, five, six, seven,
> eight, nine);
>   TDigits = Set Of TDigit;
> Var Digits: TDigits;
> Begin
>   Digits := [zero..two, four..six];
>   Include(Digits, three);
>   Digits := Digits + [seven..nine];
>   // Ну и  в таком духе — операции со множествами.
> End;

---
> Я понимаю, для процессора это всего-навсего возня с битами
> в целочисленных значениях. Меня не испугает никакой язык,
> если в нём есть операции or, and, xor и прочяя... Но
> возможно, не надо изобретать колесо и есть уже что-то в
> самом языке?

На уровне, совместимом с классическим С - это честная возня с битами. В С++ для этого есть класс из стандартной библиотеки std::bitset, реализован вполне эффективно.

> Теперь ещё. Была у меня раньше мечта — повозится в ядре
> драйвером ;-) Delphi для этого не самый лучший инструмент,
> посколько он для этого не предназначен и включает даже в
> самую маленькую программу кучу инициализирующего дерьма с
> вызовом функций из библиотек пользовательского режима.
> Скажу даже, что за C я взялся, тайно движимый «ядерной»
> мечтою ;-) Но, наверное, взялся не за тот компилер, а
> именно за борландовсий С. И что я вижу — программа, которая
> «ничего не делает» — а именно, входит в Main и выходит из
> неё, без единого #include занимает 7 с лишним килобайт и
> выполняет кучу дерьма пользовательского режима при старте.
> С этим можно как-то побороться, или мне нужен другой
> компилятор?

Ну, например, в VC всегда можно отрубить стандартную библиотеку, определить свою точку входа вместо стандартной. Скажем, в каких-то простых loader'ах я люблю определить свой WinMainCRTStartup, в итоге вполне функциональные программы получаются размером 2к, из которых большая часть приходится на заголовок, stub и т.п.

> Ещё в PE-заголовке драйверов выставляется флаг NATIVE
> subsystem, это как делается?

У VC есть параметр линкера /SUBSYSTEM. И вообще, для таких задач VC, пожалуй, подходит больше, все-таки это родной компилятор, опять же, всякие примеры будут собираться сходу, без предварительного рихтования make-файлов (как это было раньше, по крайней мере).
[C++] Ну и еще 02.02.03 02:48  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Ну, например, в VC всегда можно отрубить стандартную
> библиотеку, определить свою точку входа вместо стандартной.
> Скажем, в каких-то простых loader'ах я люблю определить
> свой WinMainCRTStartup, в итоге вполне функциональные
> программы получаются размером 2к, из которых большая часть
> приходится на заголовок, stub и т.п.
У Matt Pietrek-а есть либа libctiny - реализует _main _WinMain _DllMain всякие printf-ы с malloc-ами, в общем самые полезные функции из crt большей частью средствами WinAPI. При этом ее сырцы весят 17 кило, а сама либа (в COFF-е со всей вспомогательной инфой) - 15 кило. Если подрубить ее вместо стандартной библиотеки, то оставляя возможность использования основных crt-функций она увеличивает файл не на очень много.

> У VC есть параметр линкера /SUBSYSTEM. И вообще, для таких
> задач VC, пожалуй, подходит больше, все-таки это родной
> компилятор, опять же, всякие примеры будут собираться
> сходу, без предварительного рихтования make-файлов (как это
> было раньше, по крайней мере).
А что действительно можно в BC собирать DDK-шные примеры (пусть даже и с рихтованием makefile-ов) - там же вроде куча чисто VC-шных расширений.
Одна только #pragma по каталогу inc нашлась в 226-ти файлах (в 2k DDK) - сомневаюсь, чтоб BC поддерживал все те же pragm-ы, что и VC, если они даже секции кода и данных не захотели называть так же и ресурсы хранить так же и вообще им не по пути.
[C++] Ну и еще 02.02.03 04:27  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <обсуждение закрыто>
> У Matt Pietrek-а есть либа libctiny - реализует _main
> _WinMain _DllMain всякие printf-ы с malloc-ами, в общем
> самые полезные функции из crt большей частью средствами
> WinAPI. При этом ее сырцы весят 17 кило, а сама либа (в
> COFF-е со всей вспомогательной инфой) - 15 кило. Если
> подрубить ее вместо стандартной библиотеки, то оставляя
> возможность использования основных crt-функций она
> увеличивает файл не на очень много.

Да на самом деле в WinAPI вполне приличное количество функций, которыми при желании можно обойтись и самостоятельно, если стоит цель минимальный размер любой ценой.

> А что действительно можно в BC собирать DDK-шные примеры
> (пусть даже и с рихтованием makefile-ов) - там же вроде
> куча чисто VC-шных расширений.
> Одна только #pragma по каталогу inc нашлась в 226-ти файлах
> (в 2k DDK) - сомневаюсь, чтоб BC поддерживал все те же
> pragm-ы, что и VC, если они даже секции кода и данных не
> захотели называть так же и ресурсы хранить так же и вообще
> им не по пути.

Я очень давно не смотрел BC. Не исключено, что они стали обеспечивать совместимость - включили же они в итоге поддержку MFC. Мне муки прикручивания любой библиотеки, автор которой забыл учесть BC, надоели году так в 95-м :)
[C++] Если найдешь DDK для BC - можешь и на нем дриверы писать :-)) 02.02.03 01:23  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Тут столкнулся с тривиальной задачей, нужно «пулять»
> целочисленные значения по разным ветвям обработки,
> тривиальный case в Паскале справился бы на-ура. А вот в
> сях... switch - case какой-то слабоватый. Итак, пример на
> Паскале ниже и вопрос в том, как это лучше всего
> реализовать в С:
>
Case MyIntegerValue of >   0..15: DoSomthingCool(MyIntegerValue);
>   16, 18, 24: DoNextCoolThing(MyIntegerValue);
>   26..89, 90, 95, 101..170:
> VeryNiceAndCool(MyIntegerValue);
В сях case действует немного по другому - первый же встреченный case с совпадением приводит к тому, что все другие case как бы пропускаются (почему так - можно понять взглянув на код, который генерится для switch-case инструкции) - именно поэтому каждый case нужно заканчивать break-ом. Так вот, чтоб прикрутить к одной ветке исполнения несколько разных case-ов нужно просто все их указать:
switch(i) {
case 0: case 1: case 2: case 3:
do_my_stuff();
break;
case 10: case 11: case 12:
do_another_stuff();
break;
default:
do_default_stuff();
}

--- Но такой код встречается нечасто, обычно case-ы идут по предопределенным константам (кодам сообщений, ioctl-ов, чего-то еще). Если нужно например сделать что-то только для букв есть библиотечная функция: if (isalpha(char)) do_something(char); Другие типы символов можно глянуть в <ctype.h> И кстати, case-ы с не очень большим разбросом реализуются в коде при помощи таблицы указателей на функции (в общем берем нужный case используем как индекс в некой таблице и получаем искомый результат). Кстати использование всевозможных таблиц с данными - очень часто используемый прием. Если действительно жизнь не мила без множеств (set-ов) - можешь глянуть на C++ овский STL или нестандартные библиотеки типа MFC. > End;

---
> Здесь паскальный Case во всей своей красе — выбор из
> диапазона, из дискретных значений (что возможно и в сяшной
> паре switch - case), и в последней строке выбора есть
Сишный switch-case не умеет в одном case-е обрабатывать диапазоны - нет такого типа. Если нужен диапазон - нужно делать несколько case-ов.

> Ну а теперь про множества. Это немного соотносится с case.
> if MyChar in ['A'..'Z', 'a'..'z'] then DoSomthing — как это
> сделать попроще?
Собственно, см выше. Напомню:
if (isalpha(MyChar)) do_something();

> Я понимаю, что можно так:
> if (((MyChar >= "A") && (MyChar <= "Z"))|((MyChar
> >= "a") && (MyChar <= "z")))
> DoSomething();
Так, кстати, будет работать не везде. Например в кодировке EBCDIC - символы от a до z идут не непрерывно, а C задумывался как высокопортабельный язык, при этом библиотечная функция использует не 4-е сравнения (как в вышеприведенном примере), а одно индексирование и одну логическую операцию (битовое И).

> Ну и потяжелее пример с типом «множество»...
>
Type>   TDigit = (zero, one, two, three, four, five, six, seven,
> eight, nine);
>   TDigits = Set Of TDigit;
> Var Digits: TDigits;
> Begin
>   Digits := [zero..two, four..six];
>   Include(Digits, three);
>   Digits := Digits + [seven..nine];
>   // Ну и  в таком духе — операции со множествами.
> End;

---
Множеств в стандарте C нет. Есть математические библиотеки с реализациями и так далее. В стандарте C++ множества, как и многое другое есть, но не встроенные в язык, а реализованные в виде стандартной библиотеки. Это кстати соблюдается везде, где можно: все, что не нужно для самого языка выносится в библиотеку, например, в C (и C++) нет поддержки ввода/вывода на уровне языка (в отличие от паскаля, где read/write - операторы) - язык позволяет сделать это в библиотеке. Хотя может я и неточно выражаюсь, потому как эта самая библиотека стандартизирована: все реализации языка должны предоставлять то-то и то-то, а значит вроде как и тоже относятся к языку.

> Я понимаю, для процессора это всего-навсего возня с битами
> в целочисленных значениях. Меня не испугает никакой язык,
> если в нём есть операции or, and, xor и прочяя... Но
> возможно, не надо изобретать колесо и есть уже что-то в
> самом языке?
См выше. Короче, если кровь из носа нужны множества и именно на C - можешь поискать в инете куча свободных математических библиотек.

> именно за борландовсий С. И что я вижу — программа, которая
> «ничего не делает» — а именно, входит в Main и выходит из
> неё, без единого #include занимает 7 с лишним килобайт и
Маловато что-то :-)))
Вообще-то стандартное выравнивание секций для винды: 0x1000 (4 киловытеса). Именно для виндовозного PE, а не для какого-либо языка или компилятора. При этом выравниваются: заголовок, секция кода, секция данных и секция импортов. Так что минимум, чего можно добиться со стандартными установками - 16 кБ. Границу выравнивания можно уменьшить, но на фиг это никому не нужно. В сях тоже есть инициализация: как минимум проинициализировать некоторые глобальные и статические переменных (иногда не получается на этапе компиляции) и преобразовать строчку параметров строки в массив для вызова main(), вызов самого main-а и т.д.. Там не так много, но все-таки есть.

> выполняет кучу дерьма пользовательского режима при старте.
> С этим можно как-то побороться, или мне нужен другой
> компилятор?
Если собираешься писать дривера, то нужен по-луюбому (см сабж).
> Ещё в PE-заголовке драйверов выставляется флаг NATIVE
> subsystem, это как делается?
Смотри опции линкера (для VC-шного это делается так: link /subsystem:native) вот только для драйверов нужно не это

> Заранее всем большое спасибо, надеюсь что не утомил.
Не очень :-))) Наоборот, нашего полку прибыло :-)))
[C++] Если найдешь DDK для BC - можешь и на нем дриверы писать :-)) 02.02.03 01:43  
Автор: dl <Dmitry Leonov>
Отредактировано 02.02.03 01:52  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> Вообще-то стандартное выравнивание секций для винды: 0x1000
> (4 киловытеса). Именно для виндовозного PE, а не для
> какого-либо языка или компилятора. При этом выравниваются:
> заголовок, секция кода, секция данных и секция импортов.
> Так что минимум, чего можно добиться со стандартными
> установками - 16 кБ. Границу выравнивания можно уменьшить,
> но на фиг это никому не нужно.

Отрубив стандартные библиотеки и перебив свою точку входа (и не играясь с выравниванием), легко достичь 2048 байт (которые еще что-то будут делать - крутить таймер, искать окна и т.п.). Меньше у меня не получалось, да и целью такой я не задавался :)

P.S. Задание /ALIGN:16 на пустой программе дало 496 байт :)
[C++] Про малые размеры — посмотрите на regedt32.exe в WinXP — 3584 байта. А у меня 7 кб минимум с учётом того, что выставлена галка «Use dynamic RTL», а без неё вааще за 60 килов отстоя получается. Поэтому вопрос: как отключить станд. библиотеки в BC? 03.02.03 06:02  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
[C++] Это наверное и есть минимум 03.02.03 14:27  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Так как в XP regedt32 просто ShellExecute-ит regedit.exe и все
[C++] А у меня прога ShellExecute не вызывает, просто входит в Main и выходит, а занимает 7Кб. 03.02.03 14:34  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
[C++] Где в BC отключаются std lib-ы не знаю. Но это точно где то в настройках линкера. Перейдешь на VC - обращайся :-)))) 03.02.03 15:04  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
[C++] Вообще согласен :-)) 02.02.03 02:29  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> > Вообще-то стандартное выравнивание секций для винды:
> 0x1000
> > (4 киловытеса). Именно для виндовозного PE, а не для
> > какого-либо языка или компилятора. При этом
> выравниваются:
> > заголовок, секция кода, секция данных и секция
> импортов.
> > Так что минимум, чего можно добиться со стандартными
> > установками - 16 кБ. Границу выравнивания можно
> уменьшить,
> > но на фиг это никому не нужно.

> Отрубив стандартные библиотеки и перебив свою точку входа
> (и не играясь с выравниванием), легко достичь 2048 байт
> (которые еще что-то будут делать - крутить таймер, искать
> окна и т.п.). Меньше у меня не получалось, да и целью такой
> я не задавался :)
Да, я попытался все как можно больше упростить, и поэтому не совсем точно выразился.
На самом деле можно еще и секции слить и еще чего-нить придумать, но это извращение :-))) Щас не то время, когда нужно бороться за каждый такт или байт (эх, а хорошее было время :-))))) )
Вот именно из разряда этих извращений я где-то конкурс видел на самый маленький ELF. Там команда true или false (не помню да и не важно) в полном соответствии со стандартом ELF-а, имеющая все необходимые секции и т.д. занимала что-то около 100 байт (может и еще меньше :-))) )

> P.S. Задание /ALIGN:16 на пустой программе дало 496 байт :)
[C++] Ну вот, дальше — больше. Ещё вопросы из серии тупых, но на этот раз чуточку поумнее. Pls, help... 02.02.03 00:53  
Автор: Tamas Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
ты товарищь слишком к поскалу приык
у тебя ошибка даже в этом коде
if (((MyChar >= "A") && (MyChar <= "Z"))|((MyChar >= "a") && (MyChar <= "z")))
{
}
это должно ваглидеть так
if (((MyChar >= 'A') && (MyChar <='Z'))|((MyChar >= 'a') && (MyChar <='z')))
{
}
это конечно мелочь все ошибаются
но носамом деле C# лучьше чем паскаль
хотя switch мне ненравися !
[C++] Ну вот, дальше — больше. Ещё вопросы из серии тупых, но на этот раз чуточку поумнее. Pls, help... 02.02.03 10:56  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
> но носамом деле C# лучьше чем паскаль
Ну про C#, если хочется в ядре копаться, лучше забыть... А что касается "лучше-хуже" - зависит от решаемых задач.
> хотя switch мне ненравися !
Мне тоже. Как и else-if. Предпочитаю ветвление при помощи таблицы переходов.
[C++] Тоже сильно не люблю C# 02.02.03 18:19  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Уж сильно начал смахивать на VB. Сборка мусора и многое другое. А уж отказ от указателей, потому как они приводят к ошибкам в программах меня вообще убил. Похоже в мелкософте еще не поняли, что к ошибкам в программах приводят компьютеры. И то не у всех и не всегда. Когда поймут - посмотрю как они от компов отказываться будут
1  |  2  |  3 >>  »  




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach