Подтвердить что ты не робот

Рекомендации по написанию кода C

Как мое формальное образование в программировании до даты C, я изучил C из K & R и других текстов.

Есть ли полезные советы для вокализующего кода C при чтении и записи?

Например, в

 d = emalloc(sizeof(*d));
 d->d_name = estrdup(name);

is '=' лучше всего читать как 'установлено значение' или 'равно' или что-то еще?

Будет ли '==' тогда читать как 'equals' или 'is' или 'имеет то же значение, что и??

Аналогично "* d", "d- > d_name", а затем "& d", "и", "& &" и т.д.

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

4b9b3361

Ответ 1

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

И что интересно, это работает даже тогда, когда я действительно не знаю, что делает функция. Например, я раньше не встречал emalloc(), но мой мозг все еще говорит мне, что делает утверждение (возможно).

Если по какой-то причине (война? национальная безопасность?), я прочитал что-то вроде:

 d->d_name = estrdup(name);

по телефону, я бы сказал:

", на которое указывает d d_name член получает назначенный результат вызов estrdup с именем в качестве Параметр"

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

Ответ 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/С# в мире, когда-либо.