编译.h文件时报错“error: backslash-newline at end of file [-Werror]:

本文详细阐述了在.h头文件中添加空行以解决编译错误的方法,重点讲解了如何修复宏定义和函数声明之间的空行问题,确保代码可编译通过。
解决办法:在文件末尾加一行空行

例如在编译如下.h文件时,报错

#define func1(name, begin)          \
    static thread_local A __x_y_z_agg_##name(#name); \
    (__x_y_z_agg_##name).B(begin)
    
#define func2 A::C

需改为

#define func1(name, begin)          \
    static thread_local A __x_y_z_agg_##name(#name); \
    (__x_y_z_agg_##name).B(begin)
    
#define func2 A::C

linux编译候出现以下问题: CC minidlna.o In file included from minidlna.h:48:0, from minidlna.c:50: sql.h:42:14: error: unknown type name 'sqlite3' int sql_exec(sqlite3 *db, const char *fmt, ...); ^~~~~~~ sql.h:43:19: error: unknown type name 'sqlite3' int sql_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn); ^~~~~~~ sql.h:44:23: error: unknown type name 'sqlite3' int sql_get_int_field(sqlite3 *db, const char *fmt, ...); ^~~~~~~ sql.h:45:29: error: unknown type name 'sqlite3' int64_t sql_get_int64_field(sqlite3 *db, const char *fmt, ...); ^~~~~~~ sql.h:46:27: error: unknown type name 'sqlite3' char * sql_get_text_field(sqlite3 *db, const char *fmt, ...); ^~~~~~~ sql.h:47:16: error: unknown type name 'sqlite3' int db_upgrade(sqlite3 *db); ^~~~~~~ In file included from minidlna.c:50:0: minidlna.h:72:3: warning: #warning "Your SQLite3 library appears to be too old! Please use 3.5.1 or newer." [-Wcpp] # warning "Your SQLite3 library appears to be too old! Please use 3.5.1 or newer." ^~~~~~~ minidlna.h:104:13: error: unknown type name 'sqlite3' int open_db(sqlite3 **sq3); ^~~~~~~ minidlna.h:117:15: error: unknown type name 'sqlite3' void check_db(sqlite3 *db, int new_db); ^~~~~~~ In file included from minidlna.c:52:0: upnpglobalvars.h:191:40: warning: backslash and newline separated by space "http-get:*:audio/x-monkeys-audio:*," \ upnpglobalvars.h:247:8: error: unknown type name 'sqlite3' extern sqlite3 *db; ^~~~~~~ minidlna.c: In function 'init': minidlna.c:1014:2: warning: statement with no effect [-Wunused-value] for (failnums; failnums < 10; failnums++) ^~~ minidlna.c: In function 'main': minidlna.c:1377:6: error: implicit declaration of function 'sqlite3_libversion_number' [-Werror=implicit-function-declaration] if (sqlite3_libversion_number() < 3005001) ^~~~~~~~~~~~~~~~~~~~~~~~~ minidlna.c:1567:20: error: implicit declaration of function 'sqlite3_total_changes'; did you mean 'sqlite3_threadsafe'? [-Werror=implicit-function-declaration] if (scanning || sqlite3_total_changes(db) != last_changecnt) ^~~~~~~~~~~~~~~~~~~~~ sqlite3_threadsafe minidlna.c: In function 'minidlnaStart': minidlna.c:1674:2: error: implicit declaration of function 'sqlite3_initialize'; did you mean 'sqlite3_malloc'? [-Werror=implicit-function-declaration] sqlite3_initialize(); ^~~~~~~~~~~~~~~~~~ sqlite3_malloc minidlna.c: In function 'minidlnaShutdown': minidlna.c:1818:8: error: implicit declaration of function 'sqlite3_close'; did you mean 'sqlite3_malloc'? [-Werror=implicit-function-declaration] ret = sqlite3_close(db); ^~~~~~~~~~~~~ sqlite3_malloc minidlna.c:1819:6: error: 'SQLITE_OK' undeclared (first use in this function) if (SQLITE_OK != ret) ^~~~~~~~~ minidlna.c:1819:6: note: each undeclared identifier is reported only once for each function it appears in minidlna.c:1826:8: error: implicit declaration of function 'sqlite3_shutdown'; did you mean 'sqlite3_malloc'? [-Werror=implicit-function-declaration] ret = sqlite3_shutdown(); ^~~~~~~~~~~~~~~~ sqlite3_malloc minidlna.c: At top level: minidlna.c:1851:13: error: unknown type name 'sqlite3' int open_db(sqlite3 **sq3) ^~~~~~~ minidlna.c:1917:15: error: unknown type name 'sqlite3' void check_db(sqlite3 *db, int new_db) ^~~~~~~ minidlna.c: In function 'minidlna_startScannerThread': minidlna.c:2067:8: error: implicit declaration of function 'open_db'; did you mean 'opendir'? [-Werror=implicit-function-declaration] ret = open_db(NULL); ^~~~~~~ opendir minidlna.c:2095:14: error: implicit declaration of function 'sql_get_int_field' [-Werror=implicit-function-declaration] updateID = sql_get_int_field(db, "SELECT VALUE from SETTINGS where KEY = 'UPDATE_ID'"); ^~~~~~~~~~~~~~~~~ minidlna.c:2103:2: error: implicit declaration of function 'check_db' [-Werror=implicit-function-declaration] check_db(db, ret); ^~~~~~~~ At top level: minidlna.c:193:12: warning: 'l_rescanFlag' defined but not used [-Wunused-variable] static int l_rescanFlag = 0;
08-19
改为GCC11,然后cmakelists文件也修改了,但是还是报错:In file included from /home/guo/定位新代码/src/share/common/include/base/file.h:15, from /home/guo/定位新代码/src/share/common/include/base/file.cpp:1: /home/guo/定位新代码/src/share/common/include/base/macros.h:29:62: warning: backslash and newline separated by space 29 | expression; \ | In file included from /home/guo/定位新代码/src/share/common/include/base/file.h:15, from /home/guo/定位新代码/src/share/common/include/base/format.h:13, from /home/guo/定位新代码/src/share/common/include/base/format.cpp:1: /home/guo/定位新代码/src/share/common/include/base/macros.h:29:62: warning: backslash and newline separated by space 29 | expression; \ | [ 96%] Linking CXX shared library /home/guo/定位新代码/devel/lib/libabsl_log_flags.so [ 96%] Built target log_flags In file included from /home/guo/定位新代码/src/share/common/include/base/health_reporter.h:13, from /home/guo/定位新代码/src/share/common/include/base/health_reporter.cpp:1: /home/guo/定位新代码/src/share/common/include/base/macros.h:29:62: warning: backslash and newline separated by space 29 | expression; \ | [ 96%] Linking CXX shared library /home/guo/定位新代码/devel/lib/libabsl_flags_usage_internal.so In file included from /home/guo/定位新代码/src/share/common/include/base/health_reporter.h:15, from /home/guo/定位新代码/src/share/common/include/base/health_reporter.cpp:1: /home/guo/定位新代码/src/share/common/include/base/traits.h:3:10: fatal error: concepts: 没有那个文件或目录 3 | #include <concepts> | ^~~~~~~~~~ compilation terminated. make[2]: *** [share/common/include/base/CMakeFiles/common_base.dir/build.make:104:share/common/include/base/CMakeFiles/common_base.dir/health_reporter.cpp.o] 错误 1 make[2]: *** 正在等待未完成的任务.... [ 96%] Built target flags_usage_internal Consolidate compiler generated dependencies of target flags_usage [ 97%] Building CXX object share/common/include/abseil-cpp/absl/flags/CMakeFiles/flags_usage.dir/usage.cc.o In file included from /home/guo/定位新代码/src/share/common/include/base/node_base.h:17, from /home/guo/定位新代码/src/share/common/include/base/node_base.cpp:1: /home/guo/定位新代码/src/share/common/include/base/macros.h:29:62: warning: backslash and newline separated by space 29 | expression; \ | In file included from /home/guo/定位新代码/src/share/common/include/base/node_base.h:19, from /home/guo/定位新代码/src/share/common/include/base/node_base.cpp:1: /home/guo/定位新代码/src/share/common/include/base/traits.h:3:10: fatal error: concepts: 没有那个文件或目录 3 | #include <concepts>
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值