[英]“#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.