ped*_*tos 9 c sockets networking function
我最近开始用C学习网络,我看到一些以下划线开头的函数_function() - 这究竟是什么意思?我也看到了这个:
struct sockaddr_in {
__SOCKADDR_COMMON (sin_);
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
Run Code Online (Sandbox Code Playgroud)
这部分代码意味着什么:
__SOCKADDR_COMMON (sin_);
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
Run Code Online (Sandbox Code Playgroud)
Die*_*Epp 17
下划线前缀保留用于编译器和标准库使用的函数和类型.标准库可以自由使用这些名称,因为它们永远不会与正确的用户程序冲突.
另一方面是不允许您定义以下划线开头的名称.
嗯,这是规则的要点.实际的规则是这样的:
您不能在名称以下划线开头的全局范围内定义任何标识符,因为这些标识符可能与隐藏(私有)库定义冲突.所以这在您的代码中无效:
#ifndef _my_header_h_
#define _my_header_h_ // wrong
int _x; // wrong
float _my_function(void); // wrong
#endif
Run Code Online (Sandbox Code Playgroud)
但这是有效的:
#ifndef my_header_h
#define my_header_h // ok
int x; // ok
float my_function(void) { // ok
int _x = 3; // ok in function
}
struct my_struct {
int _x; // ok inside structure
};
#endif
Run Code Online (Sandbox Code Playgroud)您不能在名称以两个下划线开头的任何范围内定义任何标识符,也不能在大写字母后跟一个下划线.所以这是无效的:
struct my_struct {
int _Field; // Wrong!
int __field; // Wrong!
};
void my_function(void) {
int _X; // Wrong!
int __y; // Wrong!
}
Run Code Online (Sandbox Code Playgroud)
但这没关系:
struct my_struct {
int _field; // okay
};
void my_function(void) {
int _x; // okay
}
Run Code Online (Sandbox Code Playgroud)实际上还有一些规则,只是为了使事情变得复杂,但上面的规则是最常被违反和最容易记住的.
前导下划线通常表示以下三种情况之一:
在这种情况下,__SOCKADDR_COMMON是(2):内部定义,struct sockaddr_in类型的一部分,是您通常从userland访问的定义.
| 归档时间: |
|
| 查看次数: |
8377 次 |
| 最近记录: |