如何使用忽略某些语法来执行gcc

时间:2018-02-06 12:48:43

标签: c gcc

我想运行以下代码 gcc -M [file]

但是,如果我包含_ FILE _,如下所示,则会出现错误。

#include <stdio.h>
#include __FILE__

int main(int argc, char* argv[]) {
  printf("Hello, world!\n");
  return 0;
}

所以 有没有办法运行gcc -M而忽略某些语法?

1 个答案:

答案 0 :(得分:2)

字面上问的问题的答案是:不。 GCC无法禁用由无条件#include __FILE__触发的错误,也无法禁用其他几个相关的错误类别,例如当头文件丢失或无法访问时获得的错误。

IDE不需要对这些情况做任何特别优雅的事情,因为它们不会出现在执行任何有用的代码中。只需将错误消息公开给用户即可。 (你可以合理地省去在实际错误之前的200行“from test.c:2:”。)

(如果任何人在阅读此内容时都不清楚#include __FILE__做了什么,它会导致预处理器从头开始重新读取包含该语句的文件,作为嵌套的include;在没有任何其他机制的情况下,把它放到一个无限递归中,GCC在200的“arbitrary limit”中切断了深度。)