C、 #if指令和编译错误:运算符'/';没有正确的操作数

C、 #if指令和编译错误:运算符'/';没有正确的操作数,c,if-statement,preprocessor,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

我遇到了一个我不理解的错误,主要是因为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
我通过简单地将评论放在#定义之上解决了这个问题,如下所示:

// number of hermitian matrices
#ifndef nH
    #define nH 2
#endif
此外,如果取消#if指令,则不会发生错误。 不过,我不明白这个问题,我想知道到底出了什么问题

谢谢

编辑: 所以,现在我尝试复制它,它编译得非常完美。我不知道,我所能做的就是发布一个我所犯错误的截图。正如你所看到的,两者之间没有空间/

请确认用于添加注释的//之间没有空格,
只有当两个斜杠之间有空格时,才可能出现错误。在这种情况下,它将被视为除法表达式,并且由于您没有在第一个斜杠(/)的右侧写入任何数字,所以编译器会给出此错误。

请确保预处理时将语言设置为至少C99

如果预处理:

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

您将得到
pp.c:2:20:错误:运算符“/”没有正确的操作数


但是,如果将语言设置为c99或更高版本(
gnu*
gnu89
开头的变体也可以工作),则不应收到此错误消息。

您在define子句中使用注释:
//埃尔米特矩阵数
如果预处理器在注释之前进行定义,这可能会导致问题您使用的编译器是什么?我无法复制。@Psi:这不是问题。也许你使用的是一个古老的预处理器。使用
/**/
-风格的注释可以解决问题吗?现在它正在编译…我不知道该说什么,我花了一个小时在这上面…我想了想,但是没有空间…我在主帖子上添加了一个错误的屏幕截图,我正在使用gcc 4.8.4。不幸的是(或幸运的是),我通过将注释放在上面(不在同一行)解决了这个问题,现在即使我尝试也无法复制错误
gcc-4.8 -std=c89 -E pp.c