禁止C预处理程序更改变量名称

时间:2019-09-06 12:18:53

标签: c

这是一个代码示例

#define S 113

double some_func1()
{
    return S;
}

double some_funcN( float S )
{
    return S/0.1;
}

当我尝试编译它时,出现此错误:

错误C2143:语法错误:“常量”前缺少“)”

我想知道是否可以在不重命名'S'变量的情况下进行修复?

1 个答案:

答案 0 :(得分:2)

令牌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;