Компилятору - да, всё равно. А вот человеку - нет. В Linux kernel принято, что typedef можно делать для примитивных типов, и нельзя - для структурных. ИМХО, это здравый подход.
>Компилятору - да, всё равно. А вот человеку - нет. В Linux kernel принято, что typedef можно делать для примитивных типов, и нельзя - для структурных. ИМХО, это здравый подход.
Ясно. Да, кажется это здравый подход. А почему именно они так решили? Можно же использовать какой-нибудь префикс. Например: s_, st_.
static inline int ip_rcv_options(struct sk_buff *skb)
{
struct ip_options *opt;
struct iphdr *iph;
struct net_device *dev = skb->dev;
/* It looks as overkill, because not all
IP options require packet mangling.
But it is the easiest for now, especially taking
into account that combination of IP options
and running sniffer is extremely rare condition.
--ANK (980813)
*/
if (skb_cow(skb, skb_headroom(skb))) {
IP_INC_STATS_BH(IPSTATS_MIB_INDISCARDS);
goto drop;
}
iph = skb->nh.iph;
пример того, как struct "замусоривает" код ;)
> то есть слово struct не замусоривает, а префикс s_ замусоривает??
Именно так :) Кроме того, слово struct - это совершенно недвусмысленное указание на то, что тип - структурный, а s_ или st_ - всего лишь соглашение, не проверяемое компилятором.
Вообще-то вопрос следует ставить по-другому - зачем вводить соглашение, если без него можно обойтись?
> Вообще-то вопрос следует ставить по-другому - зачем вводить соглашение, если без него можно обойтись?
Чуваааак, это называется развитие. В начале был бинарные кот, патом предумали соглашение - писать мнемо-инструкции, и назвали ассмеплером, патом придумали кучу разных соклашений - языков низкоуравневых фроде фортрана или ЦЭ, патом придумалли соклашения по опьектам, и стал смоллтолк, ЦеКрестКрест , ОбжективЦе и БорладПакакаль, и так далие..
Каштое нофае соклашение увеличивает слошность опучения с атной стараны, но оплегкачет поддержку окромных праектав с друкой.