c - 禁止 C 预处理器更改变量的名称

标签 c

这是一个代码示例

#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/

相关文章:

c - 重新分配(): invalid next size and double free

c - 指针增加 1,2,3 或在数组中后增加

c - 在这种情况下如何使用 struct

C 到 python 代码转换

C 中 strtok 后无法正确计算 CSV 中的元素

c - 如何计算一个数组中的元素在另一个数组中出现的次数

c - Pthread 条件变量和无死锁

c语言if语句带sizeof

c - 编写一个函数来查找结构数组中的前 5 个最大值?

c语言中计算一个值出现的频率