这是一个代码示例
#define S 113
double some_func1()
{
return S;
}
double some_funcN( float S )
{
return S/0.1;
}
当我试图编译它时,出现了这个错误:
错误 C2143:语法错误:在“常量”之前缺少“)”
我想知道是否可以在不重命名“S”变量的情况下修复它?
最佳答案
token S
将在它出现的所有地方替换为 113
。您有几个选项可以解决此问题:
将参数重命名为
some_funcN
:double some_funcN( float n ) { return n/0.1; }
在函数之前取消定义常量并在之后重新定义它。这样做的缺点是
S
在多个地方定义,所以我不推荐它:#undef S double some_funcN( float S ) { return S/0.1; } #define S 113
将
S
从宏更改为变量。这允许变量范围规则生效,以便函数参数S
屏蔽在文件范围内声明的变量S
的定义。const int S = 113;
关于c - 禁止 C 预处理器更改变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57821911/