в связи с тем что в gfortran обнаружился на редкость идиотский баг, g95 не хочет линковать модули от plplot'а, а триал ifort'а требует анальной регистрации, уже подумываю переписать свои наработки на C (не смотря на боль). в общем, посоветуйте справочник по переходу.
ну и сразу задам вопросы, что бы знать стоит ли игра свеч:
1)производные типы данных есть только в ++ или и в чистом C?
2)массивы всегда начинаются с нуля, или можно зааллокатить произвольные границы?
3)есть ли такое понятие как вырезка массива?
4)в фортране есть такая удобная штука -- contains блок: размещённые внутри этого блока функции и подпрограммы имеют доступ ко всей памяти родительского блока. в C что ни будь аналогичное есть?
5)как работать со строками, есть какой ни будь аналог write или format'а?
для строк есть sprintf
массивы всегда начинаются с нуля.
производные типы данных только в С++
что такое вырезка массива?
contains block? не, не слышал
Следует понимать, что чистый Си минимально отрывается от реального положения дел: что напишешь, то и будет выполняться.
Практически во всех остальных языках полно неочевидных конструкций, существующих только на этапе компиляции. В других языках этот слой абстракции за каким-то чортом существует и в исполняемой программе, но это скорее удел виртуальных машинок, а таковыми я считаю все языки, со встроенным сборщиком мусора, хоть Ксерокс и Тот Кого Я Учил Брить со мной не согласятся
А хотя. Я тут терминологию перечитал. Есть производные типы данных в Си, кроме классов, разумеется. Но практически любой класс может быть описан структурой и неким набором функций, с заранее обговоренным нейм-спейсом.
Т.е. в С++ мы бы писали
C++ Source Code:
1
MyClass :: Set( int value )
2
{
3
m_iValue = value;
4
}
а в чистом Си
C++ Source Code:
1
MyClass_Set( mystruct_t *p, int value )
2
{
3
p->m_iValue = value;
4
}
Если учесть, что после компиляциии в С++ все классы развернутся в нечто аналогичное, только автоматически, то разница не так уж велика.
ну например M(1:9:3) -- будет выглядеть как массив из элементов массива M от начиная с 1го, до 9 с шагом 3
>[i]contains block? не, не слышал
хмм ну это так
program main
[описание переменных]
[тело программы]
contains
[subroutine()]
[function[]] -- все функции и подпрограммы внутри этогоо contains'а имеют доступ ко всем переменным из main
endprogram
>минимально отрывается от реального положения дел
ну вот фортран тоже, но блин такая беда с компилятором просто угнетает
Есть мнение (и не только моё), что нужно переписать на си весь код, написанный на фортране, после чего стереть все существующие в мире копии g77/g95/ifort, включая исходники и мануалы, сжечь книги по ним и пристрелить наиболее йаростных адептов этого языка.
KiQ
Я не спрашиваю, зачем заменять деление на сдвиг, это знает даже ребёнок.
Я спрашиваю, зачем строить цикл так, что при адресации нужно выполнять сдвиг (или деление) вместо потенциального "бесплатного" умножения, выполняемого самой командой mov?
Ладно, это риторический вопрос. В очередной раз убедился, до чего ява и сишарп довели народ. Никто уже и не задумывается, как компьютер выполняет программу. Зато как заменить умножение на сдвиг - это все бегом делают. Двойные стандарты...