Query regarding syntax used in a header file for socket programming

前端 未结 3 979
遥遥无期
遥遥无期 2021-01-20 13:32

This is the piece of the code I copied from one of the header file for socket programming.

/* Structure describing an Internet socket address.  */
struct soc         


        
相关标签:
3条回答
  • 2021-01-20 13:44

    It is a macro defined somwhere else. It might be defined as

    #define __SOCKADDR_COMMON(sa_prefix) \
      sa_family_t sa_prefix##family
    

    expanding that, the struct would look like

    struct sockaddr_in
      {
        sa_family_t sin_family;
        in_port_t sin_port;      
     ... 
    

    DO NOT copy this structure into your code. You are supposed to include the header file for your system that declares struct sockaddr_in.

    0 讨论(0)
  • 2021-01-20 13:49

    There exists the macro definition:

    #define __SOCKADDR_COMMON(sa_prefix) \
      sa_family_t sa_prefix##family
    

    so __SOCKADDR_COMMON (sin_); actually expands to sa_family_t sin_family;

    The way this happens is that the macro takes the parameter sa_prefix and uses the ## operator to concatenate (join) them. The result is that you have a new variable sin_family which is declared with type sa_family_t in the struct.

    Here's more info on macros and the C Preprocessor

    0 讨论(0)
  • 2021-01-20 13:50

    __SOCKADDR_COMMON() will be a #define macro that expands a set of common fields to be used in all structures

    0 讨论(0)
提交回复
热议问题