【问题标题】:Is there a GCC option to treat foo() as foo(void)?是否有 GCC 选项将 foo() 视为 foo(void)?
【发布时间】:2013-11-06 04:55:29
【问题描述】:

我正在为一种将 GNU C 作为中间代码输出的语言创建编译器。 (是的,我知道做 IR 有更好的方法,但我很懒,无论如何我都会将其重写为自托管)。

目前,如果我创建一个不带参数的函数,我的编译器会生成

bar foo(){/*Implementation here*/}

这与期望的行为不同:

bar foo(void){/*Implementation here*/}

但是,我希望 GCC 将前者视为后者(否则我必须在我的代码中做一个特殊情况)。

GCC 是否有一个标志可以做到这一点?

【问题讨论】:

  • 我怀疑存在,因为这是没有意义的。
  • @alk:我也怀疑,但 GCC 大得惊人。
  • 是的,它强大但不够愚蠢,可以提供显然会妨碍其任务的功能,即编译 C 源代码。而且要求的不是C。但是gcc有一个插件接口。并且每个人都可以免费使用它,并以此为 gcc 添加功能。
  • @alk:我很欣赏这可能没有充分的理由。只是想知道。
  • g++ 的身份调用 gcc ;)

标签: c gcc intermediate-code


【解决方案1】:

搜索了gcc 提供的大量选项后,我没有找到任何接近你想要的东西。

但是,如果您要生成 C 代码,我认为您有责任生成正确代码。 gcc bods 非常清楚“零参数”函数和“不确定数量的参数”函数之间的区别。所以,我的建议是咬紧牙关,将这种特殊情况插入到您的代码中。

如果结构合理,您只需在一处进行更改 :-)

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2020-06-16
    • 2010-09-08
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多