Что является лучшим способом для перехода на C из высокоуровневых языков?

голоса
1

Я веб-кодировщик: Я в настоящее время пользуюсь AS3 и иметь дело с PHP. У меня есть Nintendo DS и хотят, чтобы дать C идти.

От более высокого уровня, какие основные вещей / удобство существ собирается пропадает? Я не могу найти [для ... в] петли, так что я предполагаю, что они не существуют. Похоже, я буду иметь, чтобы объявить вещи религиозно, и я полагаю, у меня нет никаких объектов (которые я имел дело с в PHP некоторое время назад).

Хэш-таблицы? Забавные типы данных?

Задан 19/05/2009 в 12:57
источник пользователем
На других языках...                            


12 ответов

голоса
6

Ну ... Вы могли бы быть за что - то культурный шок. Они являются 32 стандартными ключевыми словами в C, и включают в себя основные тип.

Стандартная библиотека C является довольно функциональным (в большей степени, чем люди, возможно, ожидали), но очень и очень тонкий по сравнению с тем, что языки высокого уровня дают вам. Там нет хэш-таблицы в поле зрения, и вы правильно считать, что C не имеет синтаксической или семантической поддержки объектов.

Можно написать довольно объектно-ориентированный код в любом случае, но вам придется прыгать через несколько обручей, и делать многое другое вручную , так как язык не поможет. Смотри, например , в GTK + инструментарий пользовательского интерфейса для примера хорошо разработанной объектно-ориентированной библиотеки / C API.

Ответил 19/05/2009 в 13:01
источник пользователем

голоса
1

Динамические массивы и вывоз мусора. Он не встроен в C, так что вы должны будете катиться самостоятельно или использовать уже существующие решения.

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

Ответил 19/05/2009 в 13:02
источник пользователем

голоса
0

Я уверен, что вы хотите смотреть на C ++, а не C. C ++ в основном объектно-ориентированный язык C.

Ответил 19/05/2009 в 13:21
источник пользователем

голоса
2

Я веб-кодировщик: Я в настоящее время пользуюсь AS3 и иметь дело с PHP. У меня есть Nintendo DS и хотят, чтобы дать C идти.

Почему вы хотите сделать программирование C? Каковы ваши причины, что вы надеетесь достичь? Является ли это для того, чтобы написать программное обеспечение для Nintendo DS?

От более высокого уровня, какие основные вещей / удобство существ собирается пропадает?

Учитывая Ваш фон, я думаю, что вы будете лично пропустить отсутствие динамической поддержки набора текста, другими словами, вы должны быть очень четко в своих программах C, ваши данные должны быть указаны с соответствующими типами, так что компилятор знает, какой тип данные, которые вы работаете. Это также относится к любому виду управления памятью, то есть в основном что-нибудь, как только вы начинаете работать со структурами данных, которые не являются стручками.

Например, где вы могли бы сделать что-то подобное в PHP:

function multiply(x) {
 return (x*x);
}

Вы должны сделать что-то подобное в C:

int multiply(int x) {
 return (x*x);
}

Хотя это может показаться довольно похоже, существует большие различия, а именно введя ограничение: версия PHP будет также работать со значениями с плавающей точкой, в то время как в C вы должны явно предоставить версии для различных типов и диапазонов значений (тип C ограничена в определенные диапазоны).

Я не могу найти [для ... в] петлях, поэтому предполагаю, что они не существует

в C, это больше похоже на следующее:

ИНТ с; для (с = 0; с <= 10; C ++) {// тело цикла}

это похоже, что я буду иметь, чтобы объявить вещи религиозно

Да, очень так - гораздо более, чем вы по достоинству оцените

и я предполагаю, что у меня нет никаких объектов (которые я имел дело с в PHP некоторое время назад).

правильно, никаких объектов - но ООП все еще можно эмулировать с помощью других способов, например, функции (STRUCT OBJ)

В зависимости от ваших целей и мотивации, я думаю, вы можете найти C довольно расстраивает язык, чтобы начать серьезное программирование с, вы можете захотеть взглянуть на некоторые из связанных альтернатив, как, например, Java вместо этого.

Ответил 19/05/2009 в 13:24
источник пользователем

голоса
1

Вы особенно пропустить автоматическое управление памятью, и семантически значимые типы данных, такие как строки, таблицы и с. Тем не менее, изучение C хорошо весьма поучительно, даже если вы, вероятно, не хотите использовать его для программирования на уровень приложений, поэтому я предлагаю вам захватить «K & R» (Керниган и Ритчи семенной книга) и дать ей идти - вы найдете множество бесплатных библиотек в Интернете, чтобы использовать и изучать, как вы приступите за что, хотя вы должны дисциплинировать себя, чтобы использовать надлежащее управление памятью эвристики ... счастливого обучения!

Ответил 19/05/2009 в 13:26
источник пользователем

голоса
0

Что вы ДЕЙСТВИТЕЛЬНО пропустите это возможность быстро создавать прототипы и изменения тестов. Вы не можете просто изменить строку кода и запустить. Даже используя инструменты для сборки , такие как «сделать» перекомпиляция часто может занять несколько минут. Это еще хуже , если учесть , что это очень легко сделать ошибки в C / C ++. На больших проектах я считаю , я провожу больше времени , чем на самом деле компиляции кода. В долгосрочной перспективе пользователя языков сценариев это моя самая большая проблема с использованием C.

Ответил 19/05/2009 в 13:29
источник пользователем

голоса
-2

Многое из ООП же или почти то же самое в PHP и C #.

Вы не играете с указателями в C # (по сравнению с C ++), так что я бы определенно рекомендую идти с C #, если вы хотите играть с C.

Что C вы говорите?

C #

foreach(string item in itemsCollection)
{
...
}

PHP

foreach($itemsCollection as $key=>$value)
{
...
}

и т.п.

Мне нравится C #, потому что это сильно типизированных и ваши типы автоматически проверяются в то время как вы пишете код ... Возможность пытается сохранить целое число в строку или наоборот равна нулю по сравнению с PHP, где вы можете сохранить что-нибудь во что-нибудь ...

Ответил 19/05/2009 в 13:29
источник пользователем

голоса
0

Перемещение непосредственно из языка бега вышестоящего на машине с эффективно бесконечными ресурсами в ДС будет вызов, и не только из-за языком.

Nintendo DS имеет только 4 МБ ОЗУ, 66 МГц ARM-7, без операционной системы, а также библиотеки разработок доступны (например, libnds) обеспечивают лишь тонкую абстракцию самого оборудования.

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

Написание кода для DS, только другой вариант C ++. Вы не можете использовать много дополнительных функций, которые делают C ++ стоит на такой ограниченной системы. Вы бы писать код C, используя компилятор C ++.

Тем не менее, это очень весело. Вы можете розыгрыши с аппаратным обеспечением все, что вам нравится, и нет необходимости взаимодействовать с операционной системой, потому что не один.

Ответил 19/05/2009 в 13:38
источник пользователем

голоса
0

C следующий уровень выше прямой ассемблере и позволяет работать близко к металлу. Это дает право делать удивительные вещи, но и легко выстрелить себе в ногу!

Одним из таких примеров является прямой доступ к памяти и опасностям и чудо арифметики указателей. Указатели очень мощные, быстрые и удобные , однако , требуют тщательного управления. Смотрите этот SO вопрос для примера.

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

Я бы рекомендовал изучать вверх хороший учебник и найти пример качества кода. Главное, чтобы узнать модели , которые делают все эти вещи висят вместе правильно и элегантно (ну, как можно больше). Хороший отладчик также будет реально помочь и ознакомиться со стандартными библиотеками C тоже.

Вы можете заметить ваши приложения, разбивающихся на ровном месте, но сначала perservere, как C, безусловно, стоит, по крайней мере вмешиваются. Вы поймете некоторые из удивительных абстракций высокоуровневых языков предоставляют и то, что на самом деле происходит под капотом.

Ответил 19/05/2009 в 13:45
источник пользователем

голоса
9

Подводя итог, вы будете в основном получаете:

  • типизированные переменные
  • функции
  • указатели
  • Стандартные библиотеки

Затем, вы сделаете все остальное - что может быть немного слишком упрощенным, но это приблизительное представление о том, что к лицу.

Это может быть сложным, чтобы начать с и может быть кривым обучение, чтобы преодолеть. Вот несколько лежачих полицейских вы можете столкнуться:

Строка? Что строка?

Одна большая вещь , чтобы привыкнуть было бы строки. Там нет такого понятия , как stringв C. Строка является « null-завершённый массив символов» (иногда называемый C строк ), которые в основном означает , что массив типа charс конечным элементом будучи \0( charзначение 0).

В памяти, charмассив , содержащий длины 4 Hi!будет выглядеть следующим образом:

char[0] == 'H'
char[1] == 'i'
char[2] == '!'
char[3] == '\0'

Кроме того , строки не знают свою длину (нет таких вещей , как «объекты» , которые приходят бесплатно в C для), поэтому использование стандартного вызова библиотеки strlenпотребовалась бы, что более или менее представляет собой forцикл , который проходит через строку до она попадает \0характер. (Это означает , что это O (N) операции - больше строка, больше времени требуется , чтобы найти длину, в отличии от O (1) операций большинства stringреализации в современных языках.)

Вывоз мусора?

Нет такой вещи, не как сборщик мусора в С. В самом деле, вам нужно выделить и освободить память самостоятельно:

/* Allocate enough memory for array of 10 int values. */
int* array_of_ints = malloc(sizeof(int) * 10);

/* Done with the array? Don't forget to free the memory! */
free(array_of_ints);

В противном случае для очистки после выделения памяти может привести к вещам , называемых утечками памяти , которые я уверен , что вы слышали раньше.

Указатели!

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

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

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

Типы

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

Тем не менее, можно выполнить преобразование типов , так что можно отлить intтип (которые являются целыми числами) к doubleтипу (значение с плавающим типа). Тем не менее, это не возможно , чтобы попытаться бросить intнепосредственно в строку , как char*.

Так, например, в некоторых языках следующий допускаются:

// Example of a very weakly-typed pseudolanguage with implicit typecasts:
number n = 42
string s = "answer: "
string result = s + n  // Result: "answer: 42"

В C, можно было бы вызвать itoaфункцию , чтобы получить char*представление int, а затем использовать strcatдля конкатенации двух строк.

Вывод

Эти вещи сказали, обучение C, идущих от высшего языка может быть очень поучительным и, вероятно, вызов, чтобы начать с, но как только вы получите повесить ее, это может быть очень весело работать.

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

Я думаю , что многие люди будут рекомендовать книгу K & R , которая является действительно отличная книга.

Во-первых, я не думаю, что рекомендации K & R в качестве первой C книги было бы хорошей идеей, потому что это может быть немного на трудной стороне, но на второй мысли, я думаю, что это весьма всеобъемлющий и хорошо написанная книга, которая может быть хорошим для получения в C, если у вас уже есть некоторый опыт программирования.

Удачи!

Ответил 19/05/2009 в 14:12
источник пользователем

голоса
1

Я просто делал некоторые исследования в Интернете, и, кажется , есть жизнеспособная возможность использовать Lua для разработки на «Нинтендо DS», это на самом деле может быть самым простым способом для кого - то знакомого с языками высокого уровня , чтобы начать делать внедренное развитие, без жертвуя слишком много HLL власти и не испытывая неизбежный культурный шок при переходе от ЯВЫ к C: microlua , вот API Docs .

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

Держать нас в курсе!

Ответил 19/05/2009 в 14:37
источник пользователем

голоса
0

Нам нужно больше доморощенных разработчиков. Я GBA / NDS и многие другие встроенные разработчик платформы и надеемся увидеть, что вы по-прежнему с этим. Я бы сказал, пропустить вооружить ассемблер, а затем обратно до C или любой другой язык вы хотите, когда вы знаете, как процессор работает, языки только синтаксис.

Я предполагаю, что ваш предыдущий опыт охватывает программирование мышления, ломать вещи вниз в куски размера укуса, а затем писать код для выполнения этих блоков. Затем еще один модуль, который связывает их вместе и так далее. Тогда С другой просто язык, очень простой язык, не нужно погружаться в углах его, ехать по центру. Это хорошая привычка объявлять переменные, и т.д., и здесь вы должны. Составители сообщит вам, когда вы забыли что-то. Вы не будете нуждаться в больших понятия, большие структуры, язык магии, это встраивается, вы ресурс ограничен, напишите несколько байт здесь, прочитать регистр там, извлечь немного из данных, чтобы увидеть, если кнопка была нажата, запись регистр в ответ на движение спрайта и т.д.

Я думаю, что вы найдете NDS намного сложнее, чем C в первом, есть два процессора и некоторые инфраструктуры, чтобы получить самое простые из рабочих бинарных файлов. Конечно есть много много примеров там, как хорошо. Я вообще (и до сих пор) рекомендую начинать с GBA затем перейти на НСР. укусить куски размера.

Ответил 24/05/2009 в 13:31
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more