【问题标题】:Marco function error expected declaration specifiers or '...' before '{' tokenMarco 函数错误预期声明说明符或 '...' 在 '{' 标记之前
【发布时间】:2018-05-28 12:48:30
【问题描述】:

我尝试使用宏来编写这个函数

unsigned int put_0_right(unsigned int value, int order)
    {
        int i;
        for(i=0; i<order; i++)
            value=clear_bit(value,i);
        return value;
    }

所以我写了这个

#define unsigned int mettre_0_droite(value, order)(\
                            {\
                            int i=0;\
                            for(i=0; i<order; i++)\
                                {value=clear_bit(value,i);}\
                            return value;\
                            })

但我收到此错误expected declaration specifiers or '...' before '{' token

【问题讨论】:

  • 类似函数的宏没有返回类型。在mettre_0_droite 之前丢失unsigned int
  • 类似函数的宏也没有return 语句。
  • 如今,类似函数的宏通常被认为是个坏主意。您尝试将mettre_0_droite 编写为宏是否有原因?让它“返回”计算出的value 将非常困难。
  • 我怎样才能让它返回“值”?
  • 我建议您阅读有关宏的更多信息 - 它们不是 C 语言编译代码的一部分。它们在源文件文件被编译之前被替换和扩展。宏替换的结果可能导致函数声明,正如 C 语言定义的那样,但宏本身不是函数。

标签: c macros


【解决方案1】:

任务可能是做这样的事情。

#define mettre_0_droite(value, order) ((value) & (~((1ul << ((order) + 1)) - 1)))

而不是循环

如果你不明白函数和宏之间的区别,你需要一本好的 C 书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多