Сейчас на форуме: Alf, Adler, Rio, vsv1 (+8 невидимых)

 eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 14 июня 2016 07:26
· Личное сообщение · #1

Недавно продолжительное время возился с чужим проектом, написанном на сях, и неожиданно для себя увлёкся (сам закоренелый паскальщик). Решил более близко познакомиться с этим языком, но в процессе столкнулся с очень большой проблемой – отсутствием полноценного компилятора. Под полноценностью подразумевается наличие неурезанного встроенного ассемблера. Щупанью подверглись 3 продукта: мелкомягкий, интеловский и поделие от Digital Mars. Первые джва не знают о директиве DB/DW/DD (зато детище MS занимается самодеятельностью в асм-блоке), как следствие не дают возможности создать jump-table (самое смешное, что хаемый всеми багландский компилер не имеет таких ограничений). У последнего нет этого фатального недостатка, но к большому огорчению есть другой – деоптимизация кода левыми инструкциями (не для выравнивания). В общем вопрос такой: существует ли на свете C/C++ компилятор (или может какая-то из версий упомянутых), способный генерить качественный код и обладающий полнофункциональным inline-ассемблером? Я что-то не нашёл.



Ранг: 53.9 (постоянный), 33thx
Активность: 0.050
Статус: Участник

Создано: 14 июня 2016 08:19 · Поправил: deniskore
· Личное сообщение · #2

Используйте --> MinGW<--, тем более вы можете скомпилить проект как статик либу и использовать в Visual Studio, если в этом есть необходимость. Но в этом случае придется немного повозиться с CRT.

Для того чтобы использовать Intel синтаксис используйте параметр -masm=intel, пример:
g++ -masm=intel -c source.cpp
Code:
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.     int tst =1;
  6.     asm volatile ("mov eax,12345");
  7.     asm volatile ("mov %[var], eax"  : [var] "=r" (tst));
  8.     printf("tst = %d\n",tst);
  9.     return 0;
  10. }
  11.  

Кстати вы можете создать отдельные asm файлы в Visual Studio с нужным вам кодом и вызывать их из С кода как это показано --> тут <-- или --> тут <--

| Сообщение посчитали полезным: Tony_Stark

Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 14 июня 2016 09:55
· Личное сообщение · #3

FalseMaster пишет:
В общем вопрос такой: существует ли на свете C/C++ компилятор (или может какая-то из версий упомянутых), способный генерить качественный код и обладающий полнофункциональным inline-ассемблером?

gcc самый полноценный компилятор из тех что я знаю.

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: plutos


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 14 июня 2016 15:40 · Поправил: reversecode
· Личное сообщение · #4

FalseMaster у каждого свой асм синстаксис, не надо гнать, компиляйте отдельно свои асм функии и цепляйте объектами как вам уже сказали



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 14 июня 2016 17:34 · Поправил: dosprog
· Личное сообщение · #5

FalseMaster пишет:
как следствие не дают возможности создать jump-table


Делается на Си, зачем там тот асм?

--Добавлено--
Кстати, это блеф. Нормально на том же MSVC создаётся табличка прыжков. Как массив обычных DWORDs.
Другое дело, что потом с ним делать. Сравнительно безболезненно можно использовать эту табличку только в той же функции, где эти метки (адресами которых заполнена таблица прыжков), и заполнять эту табличку, и прыгать по этим адресам можно с использованием директивы __asm{}. Это работает.
--Конец добавленного--


Си называют ещё "макроассемблером высокого уровня".

Асм нужен при критичных битоверчениях и при использовании специфичных машинных кодов,
в остальных случаях это излишние телодвижения.

В конце концов, раздельное компилирование никто не отменял - транслировать асм-текст можно отдельно.

Добавлено спустя 1 час 43 минуты
ntldr пишет:
gcc самый полноценный компилятор из тех что я знаю.

Да, хвалят его. Вон искомый пример с массивом меток :
--> http://forum.sources.ru/showtopic=232157 <--

(Стандартно в Си такого делать нельзя. Метки не могут иметь адресов (типа того).
Адреса только у функций. Таблица прыжков в виде массива адресов функций - сколько угодно. Никто не запрещает.
Это к вопросу о "полноценности" компилятора)






Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 14 июня 2016 21:17
· Личное сообщение · #6

FalseMaster пишет:
Первые джва не знают о директиве DB/DW/DD (зато детище MS занимается самодеятельностью в асм-блоке)

Читайте Restrictions по асм-вставкам. Нормально на асм в си-проектах можно писать в asm-файлах!

-----
IZ.RU




Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 15 июня 2016 02:22 · Поправил: FalseMaster
· Личное сообщение · #7

deniskore

>> Используйте --> MinGW<--…
Про Гнусь в курсе но не рассматриваю этот вариант, потому как он, скажем так (чтобы никого не обидеть), на любителя, коим я не являюсь. Мало того, что задолбаешься набивать кучу (более 50%) лишнего текста, так оно ещё и совершенно непереносимо в отличие от того же MSVC, формат asm-синтаксиса которого сходен с паскальным и фасмовым/насмовым.

>> Кстати вы можете создать отдельные asm файлы в Visual Studio…
Так и делал (только компилял из батника, ибо самая удобная IDE на мой взгляд – хороший текстовый редактор), но данный подход имеет очень большие неудобства: 1) Несовместимость форматов объявления структур, из-за чего придётся оформлять два хидера (один для Си, другой для внешнего asm-транслятора) и синхронно производить изменения, что рано или поздно приведёт к труднообнаружимой ошибке. 2) Насколько мне известно, на данный момент ни один ассемблер не умеет расфасовывать код/данные по COMDAT'ам, и есть большие сомнения, что в ближайшем будущем ситуация изменится, т.к. на одном буржуйском форуме автор FAsm'а в ответ на соответствующий запрос фактически признался в собственном бессилии, а ведь этот чел – классный программер. Поэтому единственный вариант – это наличие именно встроенного ассемблера, что избавляет от вышеописанных геморов.

reversecode
>> у каждого свой асм синстаксис, не надо гнать
Гнать действительно не надо. Свой только у GCC. У C, Delphi, FAsm и NAsm синтаксис почти идентичен: в NAsm изжопное обращение к полям структур, Delphi не поддерживает директиву "ALIGN", C не поддерживает директивы данных. В остальном синтаксис один в один (кроме спецсимволов в именах меток и автогенерации пролога/эпилога).

dosprog

>> Делается на Си, зачем там тот асм?
Для компактности и удобочитаемости, когда кол-во маленьких подпрограмм измеряется сотнями (например при написании эмуля проца).

>> Нормально на том же MSVC создаётся табличка прыжков. Как массив обычных DWORDs.
Если ты имеешь в виду нечто подобное:
Code:
  1. __fastcall TestProc(int iJump)
  2. {
  3. __asm
  4. {
  5.    jmp   dword ptr [jtab+iJump*4]
  6. }
  7.  
  8. lab1: __asm {
  9.    mov   eax, 1
  10.    ret
  11. }
  12. lab2: __asm {
  13.    mov   eax, 2
  14.    ret
  15. }
  16. lab3: __asm {
  17.    mov   eax, 3
  18.    ret
  19. }
  20.    void *jtab[3] = { &lab1, &lab2, &lab3 };
  21. }
, то во-1-ых, компилятор этим давится, во-2-ых, куча лишней писанины/закорючек.

>> Си называют ещё "макроассемблером высокого уровня".
Незаслуженно, по крайней мере в известных мне реализациях. DMC я, кстати, зря похвалил – не принимает он имена в качестве аргументов для директив данных, только непосредственные значения.

>> Асм нужен при критичных битоверчениях и при использовании специфичных машинных кодов
Не соглашусь. Оптимизатор конечно раскидает по регистрам часто используемые данные, но эвристически заменить весь алгоритм на более оптимальный он сможет лишь обладая человечьим интеллектом, а это означает, что любая циклически вызываемая подпрограмма должна писаться только и только на асме.

>> Вон искомый пример с массивом меток…
В моём понимании массив меток это:
Code:
  1. lab1:
  2. lab2:
  3. lab3:
  4.  
  5. labarr:
  6. dd lab1,lab2,lab3


>> Стандартно в Си такого делать нельзя. Метки не могут иметь адресов (типа того).
Вот с этого и надо было начинать и этим же можно закончить.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 15 июня 2016 02:31 · Поправил: dosprog
· Личное сообщение · #8

DenCoder пишет:
Нормально на асм в си-проектах можно писать в asm-файлах!


Это раздельная компиляция..


FalseMaster пишет:
во-1-ых, компилятор этим давится, во-2-ых, куча лишней писанины/закорючек.


Чо там он давится.. Нормально всё. MSVC:
Code:
  1. //---------------------------------
  2. //C jumps table example by dosprog
  3. //---------------------------------
  4.  
  5. #include<stdio.h>
  6.  
  7. int main(){
  8. int i;
  9. unsigned long jmp_tab[3];
  10. unsigned long lbl_addr;
  11.  
  12. goto process;
  13.  
  14. lbl0:  printf("\nLabel 0"); goto after_jump_lbl;
  15. lbl1:  printf("\nLabel 1"); goto after_jump_lbl;
  16. lbl2:  printf("\nLabel 2"); goto after_jump_lbl;
  17.         
  18. process:
  19.         //---------------------------
  20.         //Init jump table
  21.         //---------------------------
  22.         //
  23.         i=0;
  24. make_table:
  25.    switch(i)
  26.    {
  27.    case 0: __asm mov eax, offset lbl0 
  28.              break;
  29.    case 1: __asm mov eax, offset lbl1
  30.              break;
  31.    case 2: __asm mov eax, offset lbl2
  32.    }
  33.    __asm  mov lbl_addr, eax;
  34.    jmp_tab[ i ] =lbl_addr;
  35.    i++;
  36.    if(i<3) goto make_table;
  37.  
  38.    for(i=0;i<3;i++) printf("lbl%d =.%08X\n",i,jmp_tab[ i ] );
  39.  
  40.  
  41.            //---------------------------
  42.            //Jumps using jump table
  43.            //---------------------------
  44.            //
  45.            i=0;
  46. next_jump:
  47.            lbl_addr=jmp_tab[ i ];
  48. __asm      jmp dword ptr lbl_addr    //jump using jump table
  49.          //*************************************************
  50. after_jump_lbl: printf("\nContinued ..");
  51.            i++;
  52.            if( i<3 ) goto next_jump;
  53.  
  54. return 0;
  55. }
Запускаем и имеем:
Code:
  1. lbl0 =.00401081
  2. lbl1 =.00401088
  3. lbl2 =.0040108F
  4.  
  5. Label 0
  6. Continued ..
  7. Label 1
  8. Continued ..
  9. Label 2
  10. Continued ..
- что и требовалось.

Вон, откомпилированный пример, тот, что выше:
e29f_15.06.2016_EXELAB.rU.tgz - JMP_TABL.EXE


FalseMaster пишет:
>> В моём понимании массив меток это: [...]


Ну, инициализацию придётся выполнить динамически. Тут ничего не поделаешь - правила.
А так всё будет работать вполне шустро, не хуже, чем на чистом асм'е (если и хуже, то некритично).
Можно распотрошить бинарник из аттача, и глянуть - там видно, что да как.

FalseMaster пишет:
Для компактности и удобочитаемости, когда кол-во маленьких подпрограмм измеряется сотнями (например при написании эмуля проца).

Вот для этого Си и предназначен, да.


FalseMaster пишет:
>> Си называют ещё "макроассемблером высокого уровня".
Незаслуженно, по крайней мере в известных мне реализациях.


)) Вполне, вполне заслуженно.
Когда приходится возиться с Си, мозги работают "по-ассемблерному". В других случаях это не так.
Замечено не мною и не вчера - я просто отметил, что формулировка очень удачная.

Ну, в общем, эти холивары бессмысленны.
Кто как хочет, тот так и делает, в общем.



| Сообщение посчитали полезным: plutos

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 15 июня 2016 08:13 · Поправил: FalseMaster
· Личное сообщение · #9

dosprog

>> Чо там он давится.. Нормально всё. MSVC:
>> - что и требовалось.
Твой пример ваще не в тему. Требовалось загнать в массив адреса локальных меток на этапе компиляции.

>> Когда приходится возиться с Си, мозги работают "по-ассемблерному". В других случаях это не так.
"По-ассемблерному" мозги работают, когда пишешь на паскале. Вот кусочек из моего незаконченного проекта на делфях:
Code:
  1. ...
  2.  
  3. @xDFD: // Prefix
  4.    dec   [ebx].zxr.R
  5.    or    [ebx].zxr.IFF, 10000000b
  6.    ret
  7.  
  8. @FE: // CP A,n
  9.    movzx edx, [ebx].zxr.A
  10.    movzx eax, al
  11.    shl   eax, 8
  12.    mov   cl, byte [FlgCp8+eax+edx]
  13.    mov   [ebx].zxr.F, cl
  14.    ret
  15.  
  16. @FF: // RST38
  17.    mov   eax, [ebx].zxr.SP
  18.    sub   eax, 2
  19.    mov   edx, [ebx].zxr.PC
  20.    mov   [ebx].zxr.SP, eax
  21.    mov   [ebx].zxr.PC, 38h
  22.    jmp   Emu_Poke16
  23.  
  24. @subr:
  25.    //  0    1   2    3   4    5   6   7   8   9    A   B    C   D    E     F
  26.    dd @NOP,@01,@02, @03,@04, @05,@06,@07,@08,@09, @0A,@0B, @0C,@0D, @0E,  @0F  // 0
  27.    dd @10, @11,@12, @13,@14, @15,@16,@17,@18,@19, @1A,@1B, @1C,@1D, @1E,  @1F  // 1
  28.    dd @20, @21,@22, @23,@24, @25,@26,@27,@28,@29, @2A,@2B, @2C,@2D, @2E,  @2F  // 2
  29.    dd @30, @31,@32, @33,@34, @35,@36,@37,@38,@39, @3A,@3B, @3C,@3D, @3E,  @3F  // 3
  30.    dd @NOP,@41,@42, @43,@44, @45,@46,@47,@48,@NOP,@4A,@4B, @4C,@4D, @4E,  @4F  // 4
  31.    dd @50, @51,@NOP,@53,@54, @55,@56,@57,@58,@59, @5A,@NOP,@5C,@5D, @5E,  @5F  // 5
  32.    dd @60, @61,@62, @63,@NOP,@65,@66,@67,@68,@69, @6A,@6B, @6C,@NOP,@6E,  @6F  // 6
  33.    dd @70, @71,@72, @73,@74, @75,@76,@77,@78,@79, @7A,@7B, @7C,@7D, @7E,  @NOP // 7
  34.    dd @80, @81,@82, @83,@84, @85,@86,@87,@88,@89, @8A,@8B, @8C,@8D, @8E,  @8F  // 8
  35.    dd @90, @91,@92, @93,@94, @95,@96,@97,@98,@99, @9A,@9B, @9C,@9D, @9E,  @9F  // 9
  36.    dd @A0, @A1,@A2, @A3,@A4, @A5,@A6,@A7,@A8,@A9, @AA,@AB, @AC,@AD, @AE,  @AF  // A
  37.    dd @B0, @B1,@B2, @B3,@B4, @B5,@B6,@B7,@B8,@B9, @BA,@BB, @BC,@BD, @BE,  @BF  // B
  38.    dd @C0, @C1,@C2, @C3,@C4, @C5,@C6,@C7,@C8,@C9, @CA,zCB, @CC,@CD, zAdcA,@CF  // C
  39.    dd @D0, @D1,@D2, @D3,@D4, @D5,@D6,@D7,@D8,@D9, @DA,@DB, @DC,@DD, zSbcA,@DF  // D
  40.    dd @E0, @E1,@E2, @E3,@E4, @E5,@E6,@E7,@E8,@E9, @EA,@EB, @EC,zED, @EE,  @EF  // E
  41.    dd @F0, @F1,@F2, @F3,@F4, @F5,@F6,@F7,@F8,@F9, @FA,@FB, @FC,@FD, @FE,  @FF  // F
  42. ...

Реализовать такое на Си, выдаваемом за высокоуровневый ассемблер, принципиально невозможно, потому как по своей парадигме он, как оказалось, недалеко ушёл от VB. А жаль, не будь всяких идиотских ограничений, можно было бы и поюзать.

Я тут нашёл ещё одну разработку под названием "Pelles C". В ней дело обстоит чуть получше. Директивы данных принимают в кач-ве параметра имена меток, правда с какого-то хера только по одной, при том что непосредственные значения можно писать через запятую. Да вот беда, он не могёт в function level linking, ибо автор ниасилил COFF, и потому просто бесполезная игрушка.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 15 июня 2016 09:56
· Личное сообщение · #10

Спор в общем ни о чем, инструментов и реализаций навалом - чем хотите, тем и пользуйтесь. Всегда можно найти что-то удобоваримое для себя. Насчет встроенного асма в VS, дело тут только в их политике защищенности, сегменты данных и кода должны быть разными и иметь свои параметры доступа, кому это не нравится - используйте VS только как редактор.

-----
Everything is relative...





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 15 июня 2016 16:11
· Личное сообщение · #11

Vamit пишет:
Спор в общем ни о чем, инструментов и реализаций навалом - чем хотите, тем и пользуйтесь. Всегда можно найти что-то удобоваримое для себя.

Согласен. ТС ничем недоволен, видимо, хочет свой компилятор реализовать )

FalseMaster пишет:
А жаль, не будь всяких идиотских ограничений, можно было бы и поюзать.

Если MSVC/MSVS - пишите в асм-модулях. Кроме того, нет ограничений в свойствах проекта по указанию своего компилятора! Вы просто пользоваться не научились...

-----
IZ.RU




Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 15 июня 2016 18:02 · Поправил: dosprog
· Личное сообщение · #12

Ну, раз так, тогда только Паскаль. Только он.

FalseMaster пишет:
"По-ассемблерному" мозги работают, когда пишешь на паскале. Вот кусочек из моего незаконченного проекта на делфях [ ASM]...[/ ASM]


)) Вот те раз. А где ж там Паскаль?

И вопрос - вот этот RET, он возврат куда? И откуда?
Code:
  1. @xDFD: // Prefix
  2.    dec   [ebx].zxr.R
  3.    or    [ebx].zxr.IFF, 10000000b
  4.    ret  <---------???
- Это путь к созданию безнадёжно глючного софта.

"Мозги работают по-ассемблерному" это не значит категориями "DD/DB/DQ", имхо.
Впрочем, неважно


Vamit пишет:
сегменты данных и кода должны быть разными и иметь свои параметры доступа, кому это не нравится - используйте VS только как редактор.


Кстати, это выглядело отталкивающе ещё в Turbo-Pascal'е - код вперемежку с данными.
Даже чисто абстрактно - такая каша не внушает доверия.
И безразлично, что то типа константы, а не переменные






Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 16 июня 2016 03:10
· Личное сообщение · #13

и все это только для:

FalseMaster пишет:
любая циклически вызываемая подпрограмма должна писаться только и только на асме


?

| Сообщение посчитали полезным: plutos

Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 16 июня 2016 04:44 · Поправил: dosprog
· Личное сообщение · #14

Gideon Vi пишет:
?


Да всё понятно.
Резюмируя - если есть желание не выходить за рамки Си, тогда массив адресов процедур.
Это имеет цену, но сулит определённые удобства и будет работать вполне надёжно.
Иначе чистый ассемблерный код, линкуемый со всем остальным.
Не грешно также и просто на ассемблере программку составить, - зачем там тот Паскаль вообще нужен..






Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 16 июня 2016 06:24
· Личное сообщение · #15

dosprog пишет:
Да всё понятно.


бро, мне не понятно. Может тогда ты, пока ТС нет, мне объяснишь профит, перекрывающий ириски?



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 16 июня 2016 07:48
· Личное сообщение · #16

dosprog пишет:
зачем там тот Паскаль вообще нужен..

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

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 16 июня 2016 09:19
· Личное сообщение · #17

FalseMaster пишет:
не дают возможности создать jump-table


gcc и clang позволяют создать jumb-table: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html

как это реализовано на практике для эмуляции ARM, можно посмотреть, например, https://github.com/citra-emu/citra/blob/master/src/core/arm/dyncom/arm_dyncom_interpreter.cpp




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 16 июня 2016 16:20
· Личное сообщение · #18

DenCoder пишет:
Кроме того, нет ограничений в свойствах проекта по указанию своего компилятора! Вы просто пользоваться не научились...

а пример можно? А то все на qtcreator да на qtcreator... Вот в студию начал переползать, только привыкать начал...
dosprog пишет:
тогда массив адресов процедур.

не вижу в этом проблемы. И какие расходы? 2-3 команды процессору?



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 16 июня 2016 17:58 · Поправил: dosprog
· Личное сообщение · #19

Dart Sergius пишет:
не вижу в этом проблемы. И какие расходы? 2-3 команды процессору?

Аналогично. Но народ вот нервничает

Gideon Vi пишет:
Может тогда ты, пока ТС нет, мне объяснишь


Попытаюсь.

ТС возмущён отсутствием в стандартном Си возможностей по организации массива адресов меток (они в Си локальны),
при этом сразу приводит в качестве примера код, который как раз и иллюстрирует, для чего в Си такой возможности нет.

Также понятно, что будь в Си такая возможность, кому-то бы понадобился уже массив глобальных меток, а иначе типа Си отстой.

В общем, нормально можно с процедурами работать, никаких проблем.


VodoleY пишет:
а на голом асме всетаки работы больше

Это да..



| Сообщение посчитали полезным: Gideon Vi


Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 17 июня 2016 20:33
· Личное сообщение · #20

Dart Sergius пишет:
а пример можно?


Сам пока не пользовался этим, не вижу пока выгоды в смене компилятора. Но в каком-то проекте видел, как это делается и как-то так:
В Solution Explorer ПКМ на проекте -> Properties -> Build Events
-> Pre-Build Event -> Command Line
-> Pre-Link Event -> Command Line
-> Post-Build Event -> Command Line
-> Custom Build Step -> Command Line

Добавлено спустя 0 минут
Это для VS2008

-----
IZ.RU





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 19 июня 2016 10:51
· Личное сообщение · #21

Кстати, в студии теоретически можно и на паскале писать, и компилировать, указывая способом выше компилятор. На каждый модуль можно свой компилятор вешать. Только чтобы работал IntelliSense для .pas, как-то поколдовать надо...

Кроме того, редактор MSVS обладает кучей полезных опций - кроме IntelliSense, есть поиск парной скобки/кавычки, букмарки, один модуль можно открыть в нескольких вкладках, что может избавить от необходимости разделять большой код на несколько файлов. Нужно быстро сравнить 2 части кода на глаз? - Нет проблем, можно 2 файла или 2 части одного файла просматривать в разных окнах. Второй такой редактор - если только эклипс, но по опыту работы с ним - ИМХО, он заметно уступает.

Преимущества работы в IDE MSVS перед Delphi в плане дебага - дизассемблер и отладчик. Не то, что в OllyDbg, конечно, но и не показывает такой бред, как jnz +0x124

-----
IZ.RU




Ранг: 4.5 (гость)
Активность: 0.020
Статус: Участник

Создано: 25 июня 2016 20:46 · Поправил: ullf
· Личное сообщение · #22

Самый лучший компилятор тот,который сам собрал из исходников:https://github.com/gcc-mirror/gcc



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 26 июня 2016 03:19 · Поправил: dosprog
· Личное сообщение · #23

DenCoder пишет:
Второй такой редактор - если только эклипс, но по опыту работы с ним - ИМХО, он заметно уступает.


Ну Multi-Edit жэ

Добавлено спустя 4 часа 7 минут
ullf пишет:
Самый лучший компилятор тот,который сам собрал из исходников:https://github.com/gcc-mirror/gcc


На каком-то этапе перестал интересоваться такими решениями,
поскольку код получается непереносимым - не будешь же всюду с собой таскать и настраивать все поковырянные компиляторы и трансляторы.
Одни из главных качеств компилятора - это его стандартность и общедоступность.
Тут эксклюзивные решения не годятся.





Ранг: 4.5 (гость)
Активность: 0.020
Статус: Участник

Создано: 26 июня 2016 11:07
· Личное сообщение · #24

Си это не переносимый язык.Скомпилированная программа в том же microsoft studio не будет работать на linux или osx.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 июня 2016 11:26
· Личное сообщение · #25

си переносимый)) результат компиляции непереносимый

| Сообщение посчитали полезным: Vamit, v00doo, ullf, Dart Sergius, FalseMaster

Ранг: 4.5 (гость)
Активность: 0.020
Статус: Участник

Создано: 04 июля 2016 09:54
· Личное сообщение · #26

reversecode пишет:
си переносимый)) результат компиляции непереносимый
Если в linux использовать winApi,то нечего не скомпилируется.




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 04 июля 2016 10:26
· Личное сообщение · #27

ullf пишет:
Скомпилированная программа в том же microsoft studio

ullf пишет:
Если в linux использовать winApi


компиляция в VS не подразумевает обязательного использования winapi.
использование си не подразумевает обязательного использования winapi.
о чем пытаетесь сказать?

| Сообщение посчитали полезным: Quadcon

Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 04 июля 2016 10:27
· Личное сообщение · #28

ullf пишет:
Если в linux использовать winApi,то нечего не скомпилируется.

Что общего между Си и microsoft visual c++?
Говоря си люди подразумевают именно Cи а не с++\obj-c и прочие диалекты. Си ничего не знает ни про какие winapi, а вы зациклились на поделке била и дальше ничего и не видите.




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 04 июля 2016 12:09
· Личное сообщение · #29

Quadcon пишет:
Си ничего не знает ни про какие winapi, а вы зациклились на поделке била и дальше ничего и не видите.

Открою тебе большую тайну: компилятор с++ от мелкомягких тоже ничего не знает о winapi. Знают о winapi библиотеки и заголовки, которые обычно поставляются вместе с ним.
ullf пишет:
Си это не переносимый язык.

Этому человеку больше не наливать. Не умеете писать на С без winapi или других низкоуровневых функций ( не берем специфический функционал ) - это ваша проблема.



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 04 июля 2016 12:40
· Личное сообщение · #30

Dart Sergius пишет:
Открою тебе большую тайну: компилятор с++ от мелкомягких тоже ничего не знает о winapi. Знают о winapi библиотеки и заголовки, которые обычно поставляются вместе с ним.

Спасибо, а то я не знал.

| Сообщение посчитали полезным: Dart Sergius
. 1 . 2 . >>
 eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати