Отключить типизацию в С (С++)

Тема в разделе "LANGS.C", создана пользователем GoldFinch, 14 ноя 2008.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Возможно ли такое? Т.е. оставить только 3-4 простых типа - byte, word, dword, float + составные типы (массивы, записи)
    Подозреваю, что такое невозножно, но можно ли както приблизиться к этому?
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    переписать все инклуды используя только указанные типы?
     
  3. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Напиши свой компилятор. Делов-то.
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Ursus
    зачем сразу компилер? компилер в си наманый. и встроенных типов хватает для выполнения задачи. а всякие HANDLE HINSTANCE можно исключить, юзать unsinged long вместо них и будет щастье :lol:
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Давно хочу. Только на это уйдет слишком много времени, проще написать нужную прогу на асме, чем писать для нее ЯВУ.
    Проблема в том, что в асме все хорошо, кроме арифметики. А в Си(++) все хорошо, кроме указателей и типов вообще. Я в принципе допускаю, что (DWORD*)p+1==(BYTE*)p+4, но писать всюду (DWORD*) или (char*) меня раздражает. Кроме того, в ряде случаев приведение типов вообще не помогает. Например я могу получить указатель на функцию (char*)&Func, но я не могу сделать тоже самое с методом, т.к. компилятор может приводить функции к (char*), а методы не может. Ладно бы компилятор не знал адрес метода, но этот метод импортируется из длл, так что его адрес известен.

    хз, может я просто успел привыкнуть к асму, где тип определяется разрядностью операнда.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    GoldFinch
    Нагородил чес слово. Импорт метода из dll это ни о чём.
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Booster
    Если что, речь шла не о проблеме импорта метода из длл. Прочитал бы сначала весь пост а не последнюю фразу %)
     
  8. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Напиши свой препроцессор. В Visual Studio есть очень полезная опция Generate Preprocessed File. Можешь сначала скормить исходники cl.exe с ключами /EP /P а потом сделать замену на регеспах.

    Таким образом можно пропатчить вижуал с++ студию на предмет более универсальных макросов для твоего препроцессора.
     
  9. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Написать инклуд - переходник?
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    GoldFinch
    Читал, и могу тебя огорчить, типизацию нельзя отключить, иначе это будет не С.
    А написал я свой предидущий пост потому, так как вижу что неверно понимаешь механизм экспорта и объекты в C++. Приводится там нормально. И вообще если тебе мешает типизация, пиши на асме. То что лениво писать оператор приведения это не повод отказываться от этого в С.
     
  11. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Как я вас понимаю... (с) :)
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну так в ассемблере тоже типы же есть. Немогу понять, чем приведение неудобно.
     
  13. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    посмотреть в сторону нетипизированных ЯП? к примеру, питон.
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    GoldFinch
    Само собой. Более того - это признак плохого стиля. В грамотно написанном коде приведений типов очень мало.Ты просто неправильно используешь С++.
    Может. Только зачем? Метод должен использоваться с объектом, а не как свободная ф-ция. См. указатели на члены класса.
     
  15. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    green
    напиши как перехватить импортируемый метод сплайсингом, в начале метода уже стоит jmp near xxx, надо его перенаправить на другой метод\функцию

    я могу сделать такое только с функцией, и только с конструкциями типа (DWORD*)(char*)pFunc+1, как сделать такое с методом я вообще хз.
     
  16. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    GoldFinch
    почитай
    hччtp://www.codeproject.com/KB/cpp/FastDelegate.aspx
    чтобы понять лучше, как реализуется функция-член в С++
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    так или иначе, если в асме я пишу много рутинного кода, то в С(++) я пишу *мало* кода, и *много* еще более рутинных описаний типов, прототипов, и прочей избыточной информации, нужной только компилятору только для проверок на "ошибки" =\
     
  18. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    GoldFinch
    Вот так можно получить адрес метода (в сложных случаях вроде виртуального наследования работать не будет - там нужно по другому).
    Код (Text):
    1. template<class MT>
    2. char *GetMethodAddr(MT m)
    3. {
    4.     return *(char **)&m;
    5. }
    6.  
    7.  
    8. // Пример использования:
    9. class C
    10. {
    11. public:
    12.     int SomeMethod();
    13. };
    14. char *pC_Method = GetMethodAddr(&C::SomeMethod);
     
  19. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    GoldFinch
    Ну так и скажи - "асм рулез, C++ гумно".

    Ты записи в дельфи не попутал случаем?

    byte, word, dword - это дефайны. Основные char, int, long, float, double и ещё чуток. Не так уж и много.
     
  20. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Заведи себе какой-нибудь UNION вpоде {void* AsPvoid; int AsDWORD; char *AsPchar} , обращайся к его полям и выгребай потом глюки типа "тут мне очень хотелось спать и я случайно зевнул букву D в слове DWORD" большой совковой лопатой. Или скажи компилятору, что отныне он не С++, а K&R C - там контроль типов был кастратный по самую шею. Заодно и ТруЪ Олд-скулЪ СиЪ СтайлЪ описания функций освоишь.