c语言中, unsigned char __ar_tip[4];这条语句怎么解释?为什么不写成: unsigned char ar_tip[4];

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:31:52
unsigned char __ar_tip[4]; 这条语句是在下面的结构体(arp包头定义)取出来的.

struct arphdr
{
unsigned short int ar_hrd; /* Format of hardware address. */
unsigned short int ar_pro; /* Format of protocol address. */
unsigned char ar_hln; /* Length of hardware address. */
unsigned char ar_pln; /* Length of protocol address. */
unsigned short int ar_op; /* ARP opcode (command). */
#if 0
/* Ethernet looks like this : This bit is variable sized
however... */
unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */
unsigned char __ar_sip[4]; /* Sender IP address. */
unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */
unsigned char __ar_tip[4]; /* Target IP address. */
#endif
};

就如其他人的回答一样,你想怎么取名都可以,只要符合变量名命名规则就可以了,通常大公司出的东西,或是一些协议标准里都会用两个"_"开头的变量名,目的就是大家知道的,他们的变量名是不希望和我们自己在写程序时随手起的变量名同名.不知道你注意了吗?"#if 0"的用法,初学者不太会注意这样的技巧.他的用处也挺大的,譬如我们写了1000行的代码出错了,而且我们初步怀疑是在其中的10行代码里,这个时候如果我们想把这10行代码注释起来,然后再运行一遍,看会不会错,如果没错那么说明错肯定在这10行代码里.而要怎样把这10代码马上注释起来呢?用"//"或"/*...*/"的方法太慢了,我们可以在要注释的第一行前加上#if 0最后一行后加上#endif,这样这10行代码就不会再执行了.因为预编译器发现#if关键字后的条件永远为假(即0),所以一直到#endif之间的语句就不让编译器编译了.

不懂

好像听某人说过,头文件定义的那些名字,都喜欢用__开头,是为了避免和用户定义的名字相同。

你自己写程序,叫什么名字都可以,只要保证正确。

是一种命名规范.
私有成员以下划线开头