宏 htonl 将内部逗号解释为参数分隔符
Macro htonl interpretes inner commas as parameter separator
这是一个在编译时返回的异常错误,只有一些编译器参数。
可以 g++ -std=c++11 -m64 -O3 -DNDEBUG
但是使用g++ -std=c++11 -m64 -Wall -g
,会出现这个问题:
macro "htonl" passed 7 arguments, but takes just 1
代码:
const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);
我不确定问题是来自 htonl
的调用还是来自我的模板哈希器。
你知道怎么解决吗?
其他信息:
template<const char C0, const char C1 = '[=11=]', const char C2 = '[=11=]',
const char C3 = '[=11=]', const char C4 = '[=11=]', const char C5 = '[=11=]',
const char C6 = '[=11=]', const char C7 = '[=11=]', const char C8 = '[=11=]',
const char C9 = '[=11=]', const char C10 = '[=11=]'>
struct CompileTime
{
//Do you think this code could help?
};
再加一对牙套:
htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))
一个解决方案是用额外的括号帮助宏:
const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));
解释为什么...这个 post 会有所帮助
Comma in C/C++ macro
这是宏内部逗号解释的问题。
这是一个在编译时返回的异常错误,只有一些编译器参数。
可以 g++ -std=c++11 -m64 -O3 -DNDEBUG
但是使用g++ -std=c++11 -m64 -Wall -g
,会出现这个问题:
macro "htonl" passed 7 arguments, but takes just 1
代码:
const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);
我不确定问题是来自 htonl
的调用还是来自我的模板哈希器。
你知道怎么解决吗?
其他信息:
template<const char C0, const char C1 = '[=11=]', const char C2 = '[=11=]',
const char C3 = '[=11=]', const char C4 = '[=11=]', const char C5 = '[=11=]',
const char C6 = '[=11=]', const char C7 = '[=11=]', const char C8 = '[=11=]',
const char C9 = '[=11=]', const char C10 = '[=11=]'>
struct CompileTime
{
//Do you think this code could help?
};
再加一对牙套:
htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))
一个解决方案是用额外的括号帮助宏:
const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));
解释为什么...这个 post 会有所帮助 Comma in C/C++ macro
这是宏内部逗号解释的问题。