Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在解析模板和作用域后获取编译文件? > C++编译器本身有很多事情要做。但是有没有办法得到它的作用呢。我的意思是,如果有宏,我们想看看预处理输出是什么,那么g++中有一个选项-E。但对于以下事项是否还有其他选择:_C++ - Fatal编程技术网

在解析模板和作用域后获取编译文件? > C++编译器本身有很多事情要做。但是有没有办法得到它的作用呢。我的意思是,如果有宏,我们想看看预处理输出是什么,那么g++中有一个选项-E。但对于以下事项是否还有其他选择:

在解析模板和作用域后获取编译文件? > C++编译器本身有很多事情要做。但是有没有办法得到它的作用呢。我的意思是,如果有宏,我们想看看预处理输出是什么,那么g++中有一个选项-E。但对于以下事项是否还有其他选择:,c++,C++,1) 使用关键字 #include<iostream> using namespace std; int main(){ cout<<"hello"<<endl; } 现在如果我们使用fun,它相当于int fun x; 编译器通过以下方式理解上述行: int x; 但是有没有g++的选项可以实现这一点呢 typedef语句的using关键字语法是using fun=int,但是我们可以得到我想要的相同输出 我目前正在做一个C+

1) 使用关键字

 #include<iostream>
 using namespace std;
 int main(){
   cout<<"hello"<<endl;
 }
现在如果我们使用fun,它相当于int

   fun x;
编译器通过以下方式理解上述行:

   int x;
但是有没有g++的选项可以实现这一点呢

typedef语句的using关键字语法是
using fun=int
,但是我们可以得到我想要的相同输出

我目前正在做一个C++文件作为输入的项目,并把它的所有细节转换成JSON。我的问题是这些别名语法对程序员很有用,但是现在我遇到了一个很大的问题。

,你不能用C++友好的格式获得一些AST(这是没有的)。 但是,GCC能够以某种文本格式(通常受C启发)转储其大多数内部表示(例如或)。阅读有关GCC的内容,并尝试许多
-fdump*
选项中的一些。例如,
-fdump tree all
将转储数百个不同的转储文件

扩展不是(例如,在C++标准中)确切地定义为一些AST转换,C++是一种语言(可悲的是如果你想要更接近的东西)。 <>如果你相信模板扩展通常可以被表示为C++(to)(更简单)C++转换,对于你的情况(一般来说,它是错误的;也可以看到递归或模板),你可以考虑开发一些来做。这将花费你几个月(甚至几年)的时间

我目前正在做一个C++文件作为输入的项目,并把它的所有细节转换成JSON。 对于某些GCC插件来说,这听起来是一个很好的用例(一定要为最新版本的GCC编写,例如2018年8月;GCC插件与特定版本的GCC绑定,GCC甚至在最近的w.r.t.插件中也取得了进展)。然而,解析C++是复杂的(无论你使用的技术是:GCC还是CLAN),它将花费大量的工作(可能要超过一年)。 我的问题是这些别名语法

相信我,这不是你唯一(或最重要)的问题C++真的很难解析


< PS. >我的旧页(过时的)可能包含有用的幻灯片和链接。

你希望你能让别人做一些困难的解析C++的任务,比如说G+环境中有什么工具。我不想切换编译器,因为大多数源代码都已经按照g++规范准备好了。有,但它还没有被维护一段时间。像gcc这样的声音不愿意分享它的AST。我非常感谢这么多信息,但我可以告诉你是否有任何方法可以获得一些工具来完成我需要的工作。我尝试了cppinsight和gccxml,但工作仍然很顺利在语法分析中,即使我用语法C++给出了文档,但它仍然是含糊的,会导致错误。我试图解释你没有简单的方法来实现你想要的。这需要多年的工作(无论C++编译器是如何基于你的工作:GCC,Clang,……)。真正的问题是C++的复杂性。
   typedef int fun;
   fun x;
   int x;