C、 #if指令和编译错误:运算符'/';没有正确的操作数
我遇到了一个我不理解的错误,主要是因为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
#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