Рекомендации по написанию кода C
Как мое формальное образование в программировании до даты C, я изучил C из K & R и других текстов.
Есть ли полезные советы для вокализующего кода C при чтении и записи?
Например, в
d = emalloc(sizeof(*d));
d->d_name = estrdup(name);
is '=' лучше всего читать как 'установлено значение' или 'равно' или что-то еще?
Будет ли '==' тогда читать как 'equals' или 'is' или 'имеет то же значение, что и??
Аналогично "* d", "d- > d_name", а затем "& d", "и", "& &" и т.д.
Я знаю, что все это значит и что они делают, вопрос относится к тому, что вы говорите (громко или внутренне) при чтении символа, особенно если вы считаете, что это помогает понять и свести к минимуму путаницу.
Ответы
Ответ 1
Я раньше не думал об этом, но теперь я понимаю, что я не интерминно читаю заявления на языке программирования, подобные приведенным выше, как английские слова. Я просто смотрю на них и знаю, что они делают.
И что интересно, это работает даже тогда, когда я действительно не знаю, что делает функция. Например, я раньше не встречал emalloc(), но мой мозг все еще говорит мне, что делает утверждение (возможно).
Если по какой-то причине (война? национальная безопасность?), я прочитал что-то вроде:
d->d_name = estrdup(name);
по телефону, я бы сказал:
", на которое указывает d d_name член получает назначенный результат вызов estrdup с именем в качестве Параметр"
Но это будет решительно не, что происходит через мою голову, когда я читаю код.
Ответ 2
Правила произношения ASCII для программистов имеют большой список, ну, правила произношения ASCII... не так лучший способ произнести указатель, обязательно, но, по крайней мере, как вербализовать символы.
Ответ 3
Я произношу это как:
d = emalloc(sizeof(*d));
dee равный размер ee malloc звездного dee
d->d_name = estrdup(name);
dee arrow dee подчеркнуть имя, равное ee stir dupe name "
Но я бы не назвал эту лучшую практику. Я не объявляю скобки, кроме случаев, когда это было бы неоднозначно, например, с приоритетом оператора. Я произношу почти все другие пункции. Я действительно читал ==
как "равный равный"
Ответ 4
Я не владею английским языком, но это те термины, которые, как я вижу, используются больше всего:
'=' - assign to
'==' - equals
d->d_name member of a struct
&d - address of d
& - bitwise and
&& - logical and (or just "and" for short)
*d - dereference d, or in case of *d = x "assign x to what is being pointed by d"
Что касается вашего примера:
d = malloc(sizeof(*a));
Выделите (malloc) объем памяти, равный размеру того, на что указывает a, и присвойте результат d.
d->d_name = estrdup(name);
Назначьте член d_name d значение, возвращаемое вызовом estrdup с именем в качестве параметра.
Ответ 5
(Говоря медленно и ясно.) Я собираюсь прочитать вам какой-то текст, по одному персонажу за раз. Я буду читать это медленно и четко, немного останавливаясь после каждого персонажа. Я попрошу вас прочитать его мне, когда я закончу, так что слушайте внимательно, но продолжайте идти, если вы допустили ошибку. Все буквы имеют строчный регистр и содержат знаки препинания повсюду. Вы готовы? (Подождите подтверждения.)
(Настройте скорость между медленными и очень медленными на основе обратной связи звука).
d пробел равно пространству emalloc левая скобка размер левой скобки звездочка d правая скобка правая скобка полуколония новая строка d тире больше чем d имя подчеркивания пространство пробела равно пространство estrdup левое скобки имя правая скобка полуколония
Хорошо, пожалуйста, прочитайте его мне медленно и по одному персонажу за раз. (Убедитесь, что они правильно передали передачу. При необходимости повторите передачу.)
Ответ 6
Я обычно использую слово/группу слов, в которых уже используются синтаксические элементы C, если мне нужно произнести/прочитать вслух код C-
например.
* d = значение по адресу памяти в d
d- > d_name = значение по адресу памяти, указанному на некотором смещении от базового адреса в d (это значение может быть интегральным значением или другим значением адреса!)
& d = адрес памяти значения d
x = y = значение x обновлено и изменено со значением в y.
x == y = сравнивает значение x со значением y
Когда я это делал, я обнаружил, что "произносить" следующие конструкции языка C было бы сложно/интересно:
union
{
int a;
float b;
}
указатели функций,
приведения типов,
-AD.
Ответ 7
IMO, вот лучший способ прочитать следующее (в отношении PHP):
= "(теперь) установлен на"
== "(теперь) равно"
=== "(теперь) идентичен"
- Вызов = "установлен на" помогает избежать неправильного использования.
- Слово "сейчас" является необязательным, но напоминает программистов (как и я) о динамическом характере значений.
Ответ 8
Я не являюсь носителем английского языка и не читаю код, но вот как я это сделаю:
= → равно
== → равно |
& Амп; → побитовое и
& & → и
& d → адрес
Я бы читал * d, d- > d_name, d.d_name как "d" / "d d_name", так как это должно быть ясно из контекста.
Ответ 9
Хмм, никогда раньше не думал об этом.
Для слов и идентификаторов я просто произношу их так, как они написаны.
Для символов я не думаю, что существует жесткое и быстрое правило. Если оператор, произнесенный, как написано, имеет смысл, я делаю это. Например, == Я произносил бы, когда равны равны. Там нет двусмысленности, и для большинства программистов она течет.
Операторы типа → хотя я бы просто сказал, что доступ к члену. Говорить "тире больше, чем" правильно, но я предполагаю, что я получу несколько забавных взглядов.
Ответ 10
d = emalloc(sizeof(*d));
dee равен ee malloc sizeof dee dee
d->d_name = estrdup(name);
dee ref dee name равно ee stir dup name
if ( d -> d_name == NULL )
если dee ref dee name имеет значение null
или
если dee ref dee name равно null
Ответ 11
Я обычно произношу как "=", так и "==" как "равно".
Там небольшая двусмысленность, так как я очень редко использую "=" в контексте, где используется его результат, или "==" в контексте, где его результат не используется. Если бы кто-то пришел, возможно, в коде, который я читал, что я не писал, я мог бы сказать "если один-равно b", или "для я равно j полуколонии я равнозначно j полуколонии плюс- плюс j. Надеюсь, что не ошибка".
В любом случае, довольно редко мне приходится говорить вслух код в контексте, где на самом деле имеет значение двусмысленность. Итак, как я обычно говорю, что это отличается от того, что я делал бы в ситуации, когда мне нужно было быть очень педантичным, чтобы точно передать текст.
Если бы я диктовал много кода (например, парное программирование), я обычно ожидал бы его прочитать, поскольку он был напечатан, поэтому можно обнаружить любые ошибки. Если бы моя двусмысленность часто путала машинистку и тратила время, тогда я ожидал, что просто соглашусь на месте встречи. Намного легче, чем формировать консенсус среди всех программистов C/С++/Java/С# в мире, когда-либо.