簡體   English   中英

“#Include”出現在 C 語言的“struct”中

[英]“#Include” appears in “struct” in C language

看代碼的時候看到這樣的用法

struct conf_param conf_params[] = 
{
#include "s2conf.h"
    { NULL }
};

我不明白這個“#include”是做什么的? 它會將“s2conf.h”文件中的所有內容放入“conf_params”嗎?

=========================s2conf.h======================

#ifndef _s2conf_h_
#define _s2conf_h_

#include "rt.h"

#define DFLT_LOGFILE_SIZE        "\"10MB\""
#define DFLT_LOGFILE_ROTATE             "3"
#define DFLT_CUPS_BUFSZ           "\"8KB\""
/* TC */
#define DFLT_MAX_RXDATA           (10*1024)
#define DFLT_MAX_TXDATA           (16*1024)
#define DFLT_MAX_WSSDATA               2048
#define DFLT_TC_RECV_BUFSZ        (40*1024)
#define DFLT_TC_SEND_BUFSZ        (80*1024)
#define DFLT_RADIO_INIT_WAIT    "\"200ms\""
#define DFLT_MAX_TXUNITS                  4
#define DFLT_MAX_130X                     8
#define DFLT_MAX_TXJOBS                 128
#define DFLT_MAX_RXJOBS                  64
#define DFLT_RADIODEV  "\"/dev/spidev?.0\""
#define DFLT_TX_MIN_GAP          "\"10ms\""   // worst case for ODU as of 07.2018 (horrible SPI performance)
#define DFLT_TX_AIM_GAP          "\"20ms\""   //  -ditto-
#define DFLT_TX_MAX_AHEAD        "\"600s\""
#define DFLT_TXCHECK_FUDGE        "\"5ms\""
/* TCP keepalive */
#define DFLT_TCP_KEEPALIVE              "1"   // Connections use keep alive
#define DFLT_TCP_KEEPIDLE              "60"   // Connection idle time (in seconds) before sending keepalive probes
#define DFLT_TCP_KEEPINTVL             "15"   // The time (in seconds) between individual keepalive probes
#define DFLT_TCP_KEEPCNT                "4"   // The maximum number of keepalive probes sent before dropping the connection

#define DFLT_MAX_RMTSH                    2   // The maximum number of keepalive probes sent before dropping the connection
#define DFLT_BEACON_INTVL        "\"128s\""   // Time between beacons in microseconds




#if defined(CFG_platform_cisco) || defined(CFG_platform_rpi64)
#undef DFLT_TX_MIN_GAP
#undef DFLT_TX_AIM_GAP
#define DFLT_TX_MIN_GAP          "\"10ms\""
#define DFLT_TX_AIM_GAP          "\"60ms\""
#endif // defined(CFG_platform_cisco)




// --------------------------------------------------------------------------------
// Flash specs
//
//      _ FLASH_ADDR         _ FLASH_BEG_A   _ FLASH_BEG_B
// |___/____________________/.............../..............._____|_BYTES_
// |   \                  _/\________             _________/  /  | PAGES
//      \   FS_PAGE_START             FS_PAGE_CNT            /
//       \________________                __________________/
//                         FLASH_PAGE_CNT
//
//  - FLASH_ADDR, FLASH_PAGE_CNT define addressible flash.
//  - FS_PAGE_START, FS_PAGE_CNT define location of FS inside addressible flash
// --------------------------------------------------------------------------------

#define FLASH_PAGE_SIZE  (4*1024)
#define FLASH_PAGE_CNT   (1024)
#define FLASH_SIZE       (FLASH_PAGE_CNT*FLASH_PAGE_SIZE)
#define FLASH_ADDR       (0*FLASH_PAGE_SIZE)
#define FLASH_ERASED     ((u4_t)0xFFFFFFFF)
#define FS_PAGE_START    (512)
#define FS_PAGE_CNT      (500)
#define FS_MAX_FD        8
#define FS_MAX_FNSIZE    256

// --------------------------------------------------------------------------------
// Non Lora runtime parameters
// --------------------------------------------------------------------------------

enum {  MAX_DEVICE_LEN = 64 };      // max size of SPI/FTDI etc radio device
enum {  MAX_HOSTNAME_LEN = 128 };   // max size of FQDN in a URI or elsewhere
enum {  MAX_PORT_LEN = 16 };        // max size of port section in a URI
enum {  MAX_URI_LEN = 128 };        // max size of a URI
enum {  MAX_FILEPATH_LEN = 256 };   

enum {  TC_RECV_BUFFER_SIZE =   DFLT_TC_RECV_BUFSZ }; // websocket connections to TC (infos/muxs)
enum {  TC_SEND_BUFFER_SIZE =   DFLT_TC_SEND_BUFSZ };

enum {  MAX_HWSPEC_SIZE = 32 };
enum {  MAX_CMDARGS = 64 };
enum {  MUXS_PROTOCOL_VERSION = 2 };
enum {  MAX_RMTSH = DFLT_MAX_RMTSH };

enum {  LOGLINE_LEN = 512 };

// --------------------------------------------------------------------------------
// Lora processing
// --------------------------------------------------------------------------------

enum {  RTT_SAMPLES     = 100 };
enum {  MAX_WSSFRAMES   =  32 };
enum {  MIN_UPJSON_SIZE = 384 };
enum {  MAX_TXUNITS     = DFLT_MAX_TXUNITS };
enum {  MAX_130X        = DFLT_MAX_130X };
enum {  MAX_TXJOBS      = DFLT_MAX_TXJOBS  };
enum {  MAX_TXFRAME_LEN =  255 };
enum {  MAX_RXFRAME_LEN =  255 };
enum {  MAX_RXJOBS      = DFLT_MAX_RXJOBS };
enum {  TXPOW_SCALE     =   10 };   // keep TX power internally as s2_t scaled by this
enum {  MAX_RXDATA      = DFLT_MAX_RXDATA };
enum {  MAX_TXDATA      = DFLT_MAX_TXDATA };
enum {  MAX_WSSDATA     = DFLT_MAX_WSSDATA };

/*
 *
 */
struct conf_param
{
    str_t name;
    str_t type;
    str_t info;
    str_t src;
    str_t value;
    void* pvalue;
    int (*parseFn)(struct conf_param* param);
};

extern struct conf_param conf_params[];

void  s2conf_ini ();
int   s2conf_set (str_t src, str_t name, str_t value);
void* s2conf_get (str_t name);   // it name a config param?
void  s2conf_printAll ();

#endif // _s2conf_h_

#ifndef _s2conf_x_
#define _s2conf_x_

#ifndef CONF_PARAM
#define CONF_PARAM(name,type,fn,value,info) extern type##_t name;
#endif

CONF_PARAM(RADIODEV            , str   , str     ,        DFLT_RADIODEV, "default radio device")
CONF_PARAM(LOGFILE_SIZE        , u4    , size_mb ,    DFLT_LOGFILE_SIZE, "default size of a logfile")
CONF_PARAM(LOGFILE_ROTATE      , u4    , u4      ,  DFLT_LOGFILE_ROTATE, "besides current log file keep *.1..N (none if 0)")
CONF_PARAM(TCP_KEEPALIVE_EN    , u4    , u4      ,   DFLT_TCP_KEEPALIVE, "TCP keepalive enabled")
CONF_PARAM(TCP_KEEPALIVE_IDLE  , u4    , u4      ,    DFLT_TCP_KEEPIDLE, "TCP keepalive TCP_KEEPIDLE [s]")
CONF_PARAM(TCP_KEEPALIVE_INTVL , u4    , u4      ,   DFLT_TCP_KEEPINTVL, "TCP keepalive TCP_KEEPINTVL [s]")
CONF_PARAM(TCP_KEEPALIVE_CNT   , u4    , u4      ,     DFLT_TCP_KEEPCNT, "TCP keepalive TCP_KEEPCNT")
CONF_PARAM(MAX_JOINEUI_RANGES  , u4    , u4      ,                 "10", "max ranges to suppress unwanted join requests")
CONF_PARAM(CUPS_CONN_TIMEOUT   , ustime, tspan_s ,            "\"60s\"", "connection timeout")
CONF_PARAM(CUPS_OKSYNC_INTV    , ustime, tspan_h ,            "\"24h\"", "regular check-in with CUPS for updates")
CONF_PARAM(CUPS_RESYNC_INTV    , ustime, tspan_m ,             "\"1m\"", "check-in with CUPS for updates after a failure")
CONF_PARAM(CUPS_BUFSZ          , u4    , size_kb ,      DFLT_CUPS_BUFSZ, "read from CUPS in chunks of this size")
CONF_PARAM(GPS_REPORT_DELAY    , ustime, tspan_s ,           "\"120s\"", "delay GPS reports and consolidate")
CONF_PARAM(GPS_REOPEN_TTY_INTV , ustime, tspan_ms,             "\"1s\"", "recheck TTY open if it failed")
CONF_PARAM(GPS_REOPEN_FIFO_INTV, ustime, tspan_ms,             "\"1s\"", "recheck if FIFO writer fake GPS")
CONF_PARAM(CMD_REOPEN_FIFO_INTV, ustime, tspan_ms,             "\"1s\"", "recheck if FIFO writer")
CONF_PARAM(RX_POLL_INTV        , ustime, tspan_ms,           "\"20ms\"", "interval to poll SX1301 RX FIFO")
CONF_PARAM(TC_TIMEOUT          , ustime, tspan_s ,            "\"60s\"", "reconnected to muxs")
CONF_PARAM(CLASS_C_BACKOFF_BY  , ustime, tspan_s ,          "\"100ms\"", "retry interval for class C TX attempts")
CONF_PARAM(CLASS_C_BACKOFF_MAX , u4    , u4      ,                 "10", "max number of class C TX attempts")
CONF_PARAM(RADIO_INIT_WAIT     , ustime, tspan_s , DFLT_RADIO_INIT_WAIT, "max wait for radio init command to finish")
CONF_PARAM(PPS_VALID_INTV      , ustime, tspan_ms,            "\"10m\"", "max age of last PPS sync for GPS time conversions")
CONF_PARAM(TIMESYNC_RADIO_INTV , ustime, tspan_ms,         "\"2100ms\"", "interval to resync MCU/SX1301")
CONF_PARAM(TIMESYNC_LNS_RETRY  , ustime, tspan_s ,           "\"71ms\"", "resend timesync message to server")
CONF_PARAM(TIMESYNC_LNS_PAUSE  , ustime, tspan_s ,             "\"5s\"", "pause after unsuccessful volley of timesync messages")
CONF_PARAM(TIMESYNC_LNS_BURST  , u4    , u4      ,                 "10", "volley of timesync messages before pausing")
CONF_PARAM(TIMESYNC_REPORTS    , ustime, tspan_s ,             "\"5m\"", "report interval for current timesync status")
CONF_PARAM(TX_MIN_GAP          , ustime, tspan_s ,      DFLT_TX_MIN_GAP, "min distance between two frames being TXed")
CONF_PARAM(TX_AIM_GAP          , ustime, tspan_s ,      DFLT_TX_AIM_GAP, "aim for this TX lead time, if delayed should not fall under min")
CONF_PARAM(TX_MAX_AHEAD        , ustime, tspan_s ,    DFLT_TX_MAX_AHEAD, "maximum time message can be scheduled into the future")
CONF_PARAM(TXCHECK_FUDGE       , ustime, tspan_s ,   DFLT_TXCHECK_FUDGE, "check radio state this time into ongoing TX")
CONF_PARAM(BEACON_INTVL        , ustime, tspan_s ,    DFLT_BEACON_INTVL, "beaconing interval")
CONF_PARAM(TLS_SNI             ,     u4,    bool ,               "true", "Set and verify server name of TLS connections")

#endif // _s2conf_x_

這是“s2conf.h”中的內容。 這里面有很多東西,會不會包含在“conf_params”中?

當預處理器遇到

#include "foo"

它用foo的內容替換該行。 你的例子並不常見,但也不例外。 您需要查看s2conf.h以了解預處理后的代碼是什么。 風格值得商榷,但至少.h擴展名具有誤導性,應該更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM