What does the compiler error “missing binary operator before token” mean?

后端 未结 4 1833
执念已碎
执念已碎 2020-11-30 09:40

I recently got the following error when trying to compile with gcc:

error: missing binary operator before token \"(\"

Web and SO

相关标签:
4条回答
  • 2020-11-30 10:20

    You get this error sometimes if you have -fno-operator-names in your compiler flags. I suffered from the exact error while building json and this solved it.

    0 讨论(0)
  • 2020-11-30 10:27

    This is not a compiler error, it is a preprocessor error. It occurs when the preprocessor encounters invalid syntax while trying to evaluate an expression in a #if or #elif directive.

    One common cause is the sizeof operator in an #if directive:

    For example:

      #define NBITS (sizeof(TYPE)*8)
      //later
      #if (NBITS>16)    //ERROR
    

    This is an error because sizeof is evaluated by the compiler, not the preprocesor.

    Type casts are also not valid preprocessor syntax:

      #define ALLBITS ((unsigned int) -1)
      //later
      #if (ALLBITS>0xFFFF)    //ERROR
    

    The rules for what can be in a valid expression are here.

    Note also that #if will evaluate an undefined macro as 0, unless it looks like it takes arguments, in which case you also get this error:

    So if THIS is undefined:

    #if THIS == 0  //valid, true
    
    #if THIS > 0 //valid, false
    
    #if THIS() == 0  //invalid. ERROR
    

    Typos in your #if statement can also cause this message.

    0 讨论(0)
  • 2020-11-30 10:33

    If you are on Linux, make sure that you do not have a header named features.h inside your project files. I had one with this name, which resulted in:

    /usr/include/x86_64-linux-gnu/bits/huge_val.h:25: error: function pointer expected

    or

    /usr/include/bits/huge_val.h:26:18: error: missing binary operator before token "("

    That is because some system headers like huge_val.h use macros like __GNUC_PREREQ that are defined by /usr/include/features.h (learn more about this header in this SO question).

    In my case I first saw this error when I started to use gcc's -I option which suddenly made gcc select my project include directory before the default system include directories.

    0 讨论(0)
  • 2020-11-30 10:37

    check the direct. no space,no special exp: add_subdirectory(Main)->add_subdirectory(main)

    0 讨论(0)
提交回复
热议问题