我最近开始学习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)];
};这部分代码是什么意思:
__SOCKADDR_COMMON (sin_);
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];发布于 2016-09-22 03:57:32
下划线前缀是为编译器和标准库使用的函数和类型保留的。标准库可以自由地使用这些名称,因为它们永远不会与正确的用户程序冲突。
另一方面,不允许定义以下划线开头的名称。
好吧,这就是规则的要点。实际规则是这样的:
#ifndef _my_header_h_ #定义_my_header_h_ //错误的int _x;//错误的float _my_function(_my_function);//错误的#endif
但这是有效的:
#ifndef my_header_h #定义my_header_h // ok int x;// ok float my_function(My_function){ // ok int _x = 3;// ok in function } struct my_struct { int _x;// ok inside structure };#endif
结构my_struct { int _Field;//错误!int __field;//错误!};void my_function(void) { int _X;//错误!int __y;//错误!}
但这是可以的:
结构my_struct { int _field;// _x };void my_function(void) { int _x;// _x }
实际上还有更多的规则,只是为了让事情变得复杂,但上面的规则是最常被违反的,也是最容易记住的。
发布于 2016-09-22 03:55:43
前导下划线通常表示以下3种情况之一:
在本例中,__SOCKADDR_COMMON是(2):一个内部定义,是struct sockaddr_in类型的一部分,通常是从userland访问的类型。
https://stackoverflow.com/questions/39625352
复制相似问题