C中的宏定义错误?

C中的宏定义错误?,c,macros,c-preprocessor,C,Macros,C Preprocessor,它抱怨错误:在“/”标记之前应该有表达式。是因为我不能用宏定义小数还是什么?删除分号: #define SOUND_SPEED 0.034; int rtt; //round trip time in microsecond double distance; distance = (double)(rtt*SOUND_SPEED)/2; 如果保留它,生成的代码将如下所示: #define SOUND_SPEED 0.034; ^ 不

它抱怨错误:在“/”标记之前应该有表达式。是因为我不能用宏定义小数还是什么?

删除分号:

#define SOUND_SPEED 0.034;    
int rtt; //round trip time in microsecond
double distance;
distance = (double)(rtt*SOUND_SPEED)/2;
如果保留它,生成的代码将如下所示:

#define SOUND_SPEED 0.034; 
                         ^
不要使用尾随的

实际上,您永远不应该用
终止宏

PRE11-C。不要用分号结束宏定义


你使用C,但是你尝试使用C++风格<代码> //< /COD>注释。根据编译器的不同,这可能是不允许的


编辑:事实上,gcc-c89-ansi为
/
注释给出了准确的错误消息,而为无关的
给出了完全不同的错误消息在define中。

@ouah来自C99,但是较旧的编译器肯定会在这段代码上失败。因为这个问题没有提到使用了什么编译器,所以我觉得值得一提。老实说,我甚至不知道有哪个C89编译器不支持它作为默认扩展。@ouah Sun的C编译器在90年代曾经失败过,不确定当前C89模式的编译器是否支持它。但正如我所说,没有提到编译器是否是C89。我有Sun C编译器(Solaristudio 12.2,带有cc 5.0)安装在我的Linux机器上,我刚刚对它进行了测试:
/
默认接受。@ouah//gcc-c89-ansi的注释给出了问题
错误:在“/”标记之前的预期表达式
,而define中的分号在“;”之前给出了“
错误:预期”)任何模式下的令牌
。问题是指/token one.+1一个愚蠢的错误——我仍然每隔几年犯一次:(它的可能重复项)查看预处理器的输出会更有说服力,例如,
gcc-e foo.c
distance = (double)(rtt*SOUND_SPEED;)/2;
                                   ^
#define SOUND_SPEED 0.034;
                         ^