C,#if指令和编译错误:operator' /'没有正确的操作数

时间:2017-03-19 17:26:45

标签: c if-statement preprocessor

我遇到了一个我不理解的错误,主要是因为if引用了代码的注释部分

基本上我有类似的东西:

#ifndef nH
    #define nH 2  // number of hermitian matrices
#endif

然后我有一个#if指令

#if (nH != 0)
    gsl_matrix_complex* H[nH];       // hermitian operators
    gsl_vector* evalH[nH];           // eigenvalues of H
#endif

如果我尝试编译,我会收到以下错误:

error: operator '/' has no right operand
     #define nH 2    // number of hermitian matrices

我通过简单地将评论放在#define上面来解决这个问题:

// number of hermitian matrices
#ifndef nH
    #define nH 2
#endif

此外,如果我取消#if指令,则不会发生错误。 不过,我不明白这个问题,我想知道到底出了什么问题

谢谢

编辑: 所以,现在我试图复制它,它完美地编译。我不知道,我所能做的就是发布我得到的错误的屏幕截图。如你所见,两者之间没有空间/ error

2 个答案:

答案 0 :(得分:1)

确保使用至少为C99的语言进行预处理。

如果您预处理:

#ifndef nH
    #define nH 2  // number of hermitian matrices
#endif
#if (nH != 0)
#endif

gcc-4.8 -std=c89 -E pp.c 

你会得到pp.c:2:20: error: operator '/' has no right operand

但如果您将语言设置为c99或更高版本(gnu*以“{1}}开头的变体”,则不应出现此错误消息

答案 1 :(得分:0)

请确认//用于添加评论之间没有空格, 只有在两者之间有任何空间时才会出现错误。在这种情况下,它将被视为Division表达式,因为您没有在第一个斜杠(/)的右侧写任何数字,这就是编译器为您提供的原因这个错误。