宏htonl将内部逗号解释为参数分隔符

时间:2019-02-13 11:16:20

标签: c++ c++11 gcc htonl

这是仅在使用某些编译器参数的情况下在编译时返回的异常错误。

使用g++ -std=c++11 -m64 -O3 -DNDEBUG

但是使用g++ -std=c++11 -m64 -Wall -g时,会发生此问题:

  

宏“ htonl”传递了7个参数,但仅接受了1个

代码:

const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);

我不确定问题是来自htonl的调用还是来自我的模板哈希器。

您知道如何解决吗?

其他信息:

template<const char C0,         const char C1 =  '\0', const char C2 =  '\0', 
         const char C3  = '\0', const char C4 =  '\0', const char C5 =  '\0', 
         const char C6  = '\0', const char C7 =  '\0', const char C8 =  '\0', 
         const char C9  = '\0', const char C10 = '\0'>
struct CompileTime
{
    //Do you think this code could help?
};

2 个答案:

答案 0 :(得分:5)

添加另一对大括号:

htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))

答案 1 :(得分:1)

一种解决方案是帮助宏附加括号:

const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));

解释原因...这篇文章会有所帮助 Comma in C/C++ macro

这是宏中逗号解释的问题。