有什么好的工具可以快速开始解析和分析C/C++代码?
特别是,我正在寻找处理C/C++预处理器和语言的开源工具.优选地,这些工具将使用lex/yacc(或flex/bison)用于语法,并且不会太复杂.他们应该处理最新的ANSI C/C++定义.
这是我到目前为止所发现的,但没有详细查看它们(想法?):
我希望将此作为将C/C++源代码翻译成新玩具语言的起点.
谢谢!-Matt
(已添加2/9):只是澄清:除了C/C++代码本身之外,我还希望从预处理器中提取语义信息.我不希望"#define foo 42"消失在整数"42"中,但仍然附加到名称"foo".不幸的是,这排除了几个首先运行预处理器并且只提供C/C++解析树的解决方案.
我在Linux,Mac OS和Windows上运行python 2.6,需要确定内核是以32位还是64位模式运行.是否有捷径可寻?
我查看了platform.machine(),但这在Windows上无法正常工作.
我也查看了platform.architecture(),这在64位Windows上运行32位python时不起作用.
注意:看起来python 2.7有一个修复程序使platform.architecture()正常工作.不幸的是,我需要使用python 2.6(至少现在).
(编辑:从与人离线谈话,听起来似乎没有一种强大的python方式来做出这种决定而不诉诸邪恶的黑客.我只是好奇人们在他们的项目中使用的邪恶黑客使用python 2.6.例如,在Windows上可能需要查看PROCESSOR_ARCHITEW6432环境变量并检查AMD64)
我记得听说过与函数闭包有关的一般优化问题,指出一般来说很难仅使用基于堆栈的内存管理来优化闭包的创建.你们有没有记住这个优化问题的名称,可能是一个例子或相关页面的链接?
在C/C++中,如何确定结构的成员变量的大小,而无需定义该结构类型的虚拟变量?这是一个如何做错的例子,但显示了意图:
typedef struct myStruct {
int x[10];
int y;
} myStruct_t;
const size_t sizeof_MyStruct_x = sizeof(myStruct_t.x); // error
Run Code Online (Sandbox Code Playgroud)
作为参考,如果你首先定义一个虚拟变量,这应该是如何找到'x'的大小:
myStruct_t dummyStructVar;
const size_t sizeof_MyStruct_x = sizeof(dummyStructVar.x);
Run Code Online (Sandbox Code Playgroud)
但是,我希望避免为了获得'x'的大小而创建一个虚拟变量.我认为有一种聪明的方法可以将0重新设置为myStruct_t,以帮助找到成员变量'x'的大小,但是已经足够长,以至于我忘记了细节,似乎无法在这方面获得良好的Google搜索.你知道吗?
谢谢!
我正在尝试使用std :: string参数创建类的方法,但它也处理NULL而不抛出异常.这是代码的示例:
class myString {
public:
myString(const std::string& str) : _str(str) {}
std::string _str;
};
int main() {
myString mystr(NULL);
printf("mystr = <%s>\n", mystr._str.c_str());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
直觉上,你认为这个程序应该打印"mystr = <>"并成功退出,但是用g ++代替它会出现这个错误:
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid
Run Code Online (Sandbox Code Playgroud)
如何更改此类以便将NULL转换为""而不是抛出logic_error异常?
(后记:正如你所怀疑的那样,"真正的"实现比这个例子复杂一点,在构造函数中有几个参数,用_str做更多有趣的事情 - 并正确地保持私有.这个例子背后的动机是我们团队中的程序员将倾向于在此上下文中使用NULL以用于历史目的,并且编译器不会捕获这一点.重新训练每个人总是使用""是相对困难的.或者,一个聪明的解决方案将很容易)