由于我在编程前C的正规教育,我从K& R和其他文本中学习了C.
在阅读和编写C代码时是否有一些有用的惯例?
例如,在
中 d = emalloc(sizeof(*d));
d->d_name = estrdup(name);
是'=',最好是'设置为'或'等于'或其他什么?
然后将'=='读作'等于'或'是'或'具有与'相同的值?
与“* d”,“d-> d_name”类似,然后是“& d”,“&”,“&&”等等。
我知道所有这些意味着什么以及他们做了什么,这个问题与你在阅读符号时所说的内容(大声或内部)有关,特别是如果你认为这有助于理解并最大限度地减少混淆。
答案 0 :(得分:10)
ASCII Pronunciation Rules for Programmers有一个很大的列表,包括ASCII发音规则......不一定是发音指针的最佳方式,但至少是如何用语言表达符号。
答案 1 :(得分:9)
我发音为:
d = emalloc(sizeof(*d));
dee等于明星的尺寸
d->d_name = estrdup(name);
dee arrow dee下划线名称等于ee stir dupe name“
但我不会称之为最佳实践。我没有发音括号,除非它是不明确的,例如运算符优先级。我几乎发出了所有其他的声音。我实际上将==
视为“平等”
答案 2 :(得分:5)
我不是英国人,但这些是我认为最常用的术语:
'=' - 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);
将名称作为参数的estrdup调用返回的值分配给d的成员d_name。
答案 3 :(得分:3)
我以前没有真正考虑过这个问题,但我现在意识到我并没有将上述编程语言语句作为英语单词进行内部阅读。我只是看着他们,知道他们做了什么。
有趣的是,即使我不知道函数是做什么的,这也有效。例如,我之前从未遇到过emalloc(),但我的大脑仍然告诉我该声明(可能)的作用。
如果由于某种原因(战争?国家安全?)我读过类似的东西:
d->d_name = estrdup(name);
通过电话,我会说:
“d s指出的事情 成员被分配了结果 用名字叫做estrdup 参数“
但是,当我阅读代码时,这显然是不我的头脑。
答案 4 :(得分:3)
(慢慢地说清楚。)我会给你读一些文字,一次一个字。我将慢慢清楚地阅读它,在每个角色后略微暂停。我完成后会要求你把它读回给我,所以仔细听,但如果你犯了错误就继续往前走。所有字母均为小写字母,并且始终包含标点符号。你准备好了吗? (等待确认。)
(根据音频反馈调节慢速和极速之间的速度。) d space等于空格emalloc左括号sizeof左括号星号d右括号右括号分号新行d dash大于d下划线名称空间等于空格estrdup左括号名称右括号分号
好的,请慢慢地回复给我,一次一个字。 (确认他们已正确接收传输。必要时重新传输。)
答案 5 :(得分:2)
如果我需要发声/朗读C代码,我通常会使用已经用于C语法元素的单词/单词组 -
e.g。
* d = d
中内存地址的值d-> d_name =内存地址处的值指向d中与基址的某个偏移量(此值可以是整数值或其他地址值!)
& d =值d的存储器地址
x = y = x的值已更新并随y中的值更改。
x == y =比较x的值和y的值
当我这样做时,我发现遵循C语言结构的'发音'会很棘手/有趣:
union
{
int a;
float b;
}
函数指针,
类型转换,
-AD。
答案 6 :(得分:2)
IMO,这是阅读以下内容的最佳方式(就PHP而言):
= “(现在)设置为”
== “(现在)等于”
=== “(现在)与”
相同答案 7 :(得分:1)
我不是母语为英语的人,我也没有读出代码,但这是我如何做的:
= - >等于
== - >等于
&安培; - >按位和
&安培;&安培; - >和
& d - >
我会将* d,d-> d_name,d.d_name读作“d”/“d d_name”,因为它应该从上下文中清楚。
答案 8 :(得分:1)
对于单词和标识符,我只是在编写时发音。
对于符号,我认为没有一个硬性规则。如果操作员发音,因为它的写法是有意义的,那么我这样做。例如,==我会发音为等于等于。那里没有歧义,对于大多数程序员而言,它都是流动的。
运营商喜欢 - >虽然我只想说会员访问权限。说“破折号大于”是正确的,但我猜我会得到一些有趣的凝视。
答案 9 :(得分:1)
d = emalloc(sizeof(*d));
dee等于ee malloc sizeof star dee
d->d_name = estrdup(name);
dee ref dee name等于ee stir dup name
if ( d -> d_name == NULL )
如果dee ref dee名称为空
或
如果dee ref dee name等于null
答案 10 :(得分:1)
我通常将“=”和“==”都称为“等于”。
没有歧义,因为我很少在使用其结果的上下文中使用“=”,或者在不使用其结果的上下文中使用“==”。如果前者出现,也许在代码中,我正在阅读我没写的内容,我可能会说“如果单个等于b”,或者“对于i等于j分号我单等于j分叉加 - 加上j。我希望这不是一个错误“。
在任何情况下,我都很少在模糊性真正重要的环境中大声说出代码。所以我通常说它与我在做的事情上有所不同,我需要对准确传达文本非常迂腐。
如果我指示了很多代码(例如,对编程),那么我通常希望在键入时读取它,因此可以发现任何错误。如果我的模棱两可经常混淆打字员和浪费时间,那么我希望只是在现场同意一个公约。远比在世界上所有C / C ++ / Java / C#程序员之间形成共识容易得多。