小编Jav*_*Man的帖子

Visual C++编译器选项转储类层次结构

MS Visual C++中的编译器选项是否等同于GCC的-fdump-class-hierarchy?即显示虚函数表布局.

c++ virtual-functions vtable visual-c++

4
推荐指数
1
解决办法
1917
查看次数

Windows静态控件如何防止输入焦点

我们知道Windows中的静态控制不会收到输入焦点.但是,由于静电控制在Windows仅仅是一个子窗口,根据迄今为止我了解,任何窗口应给予输入焦点,当我们点击它.那么静态控制如何实现拒绝输入焦点的效果呢?我怀疑它在WM_SETFOCUS处理程序中有特殊处理,它将输入焦点输出到其父窗口.不过,我已经做了一些测试,它似乎是子窗口确实没有收到在所有IE窗口从未真正试图给输入焦点静态控制在所有任何WM_SETFOCUS.

我已经阅读了输入焦点上的msdn,并且没有任何与Windows如何为静态控制分配焦点有关.任何人都可以解释如何使静态控制不具有输入焦点?

winapi controls static setfocus

3
推荐指数
1
解决办法
1090
查看次数

将注释语法添加到C++源代码中

我想在我的C++源代码中创建自己的自定义注释(就像Java样式注释一样).由于标准C++语法不允许注释,我想根据自己的需要修改/增强编译器.

但Visual Studio是否公开其编译器内部供用户修改(例如其词法分析器的输出,抽象语法树等)?如果没有,是否有任何第三方工具来解析c ++语法并允许我根据自己的注释发出我自己的自定义c ++源代码?

c++ compiler-construction annotations

3
推荐指数
2
解决办法
2705
查看次数

将过滤器驱动程序安装到现有设备

我正在学习如何编写过滤器驱动程序,并试图在现有的 HID 驱动程序(鼠标或键盘)上安装一个以进行练习。据我了解,我至少应该向硬件注册表项添加一个UpperFilters项。还有什么我应该做的吗?

当我使用 regedit 手动将UpperFilters密钥添加到目标 USB 鼠标设备时,regedit 显示它无法创建密钥。我怀疑 regedit 不允许修改 Windows 提供的设备驱动程序堆栈注册表。是否有其他方法可以将我的过滤器驱动程序安装到现有设备堆栈?

windows driver device wdk filter

3
推荐指数
1
解决办法
3528
查看次数

JIT编译器如何运作

根据定义,JIT编译器可以动态生成代码以供执行.但是,在Windows中,我们提供各种保护措施,可防止自行修改代码或从数据存储器(DEP)执行.

那么JIT编译器如何动态生成代码呢?

compiler-construction jit

3
推荐指数
1
解决办法
392
查看次数

为什么关联性是运算符的基本属性而不是优先级的基本属性

在任何编程语言教科书中,我们总是被告知该语言中的每个运算符如何具有左或右相关性.似乎关联性是任何运算符的基本属性,无论它采用多少操作数.在我看来,无论我们如何将关联性分配给其他运算符,我们都可以为任何运算符分配任何关联性.

但为什么会这样呢?也许一个例子更好.假设我想设计一种假设的编程语言.以任意方式为这些运算符分配关联性是否有效(所有这些都具有相同的优先级):

unary operator: 
! right associative 
binary operators:
+ left associative
- right associative
* left associative 
/ right associative
Run Code Online (Sandbox Code Playgroud)

!+ - */是我的5个运算符都具有相同的优先级.

如果是的话,我的假设解析器如何将2 + 2!3 + 5*6/3-5!3!3-3*2这样的表达式括起来?为什么呢.

编辑:

第一个例子(2 + 2!3 + 5*6/3-5!3!3-3*2)不正确.也许忘记一元操作,让我这样说,我们可以分配具有相同优先级的运算符,就像我上面的方式一样具有不同的关联性吗?如果是,将如何评估一个例子,比如2 + 3-4*5/3 + 2?因为大多数编程语言似乎为具有相同优先级的运算符分配相同的关联性.但我们总是谈论操作者关联性,就好像它是个体操作者的属性 - 而不是优先级的属性.

programming-languages operators operator-precedence associativity

3
推荐指数
2
解决办法
880
查看次数

使用点匹配 - 所有模式的正则表达式

通常是.除非我使用(?s)标志指定引擎,否则不匹配换行符.我使用Perl样式的regexp模式在我的编辑器(UltraEdit v14.10)regexp引擎上尝试了这个regexp:

(?s).*i
Run Code Online (Sandbox Code Playgroud)

搜索文本包含多行,每行包含许多"i"字符.

我希望上述正则表达式方式:搜索尽可能多的字符(因为与" S' "了.现在任何匹配包括换行符)越好(因为贪婪的*的),直至到达字符"I".

这应该意味着"从最后一句中的第一个字符到最后一个字母"(贪婪应该到达最后一句,对吗?).

但是根据UltraEdit的测试,结果是"从包含i的第一个句子中的第一个字符到最后一个'i'".这个结果是否正确?我对我的reg表达式做出了错误的解释吗?

例如,给出这个文本

aaa
bbb
aiaiaiaiaa  
bbbicicid
Run Code Online (Sandbox Code Playgroud)

它是

aaa
bbb
aiaiaiai
Run Code Online (Sandbox Code Playgroud)

匹配.但我希望:

aaa
bbb
aiaiaiaiaa  
bbbicici
Run Code Online (Sandbox Code Playgroud)

regex multiline ultraedit

2
推荐指数
1
解决办法
1620
查看次数

精确控制GCC的输出

出于某些原因,我希望能够微调为我的C++程序生成的最终可执行文件 - 直到单个指令.我记得,GCC应该生成一些文本汇编程序文件作为中间输出,然后将其提供给汇编程序以生成最终的二进制目标文件.

我是否有可能提取此汇编源,以编程方式编辑它并将此修改后的版本提供给最终的汇编程序以生成我的自定义目标文件?我的目标是Windows平台.

MSVC++是否支持类似的功能?

如果你想知道为什么,部分原因是通过包含我们的自定义多态代码生成逻辑来防止逆向工程.另一个原因是,在分发给客户的每个副本中创建隐藏的标识,以阻止任何人破解我们的保护并分发他的破解版本.

c c++ x86 assembly gcc

1
推荐指数
1
解决办法
239
查看次数

ANTLR4 检查解析树中节点的父节点

当访问者处理我的 ANTLR4 解析树时,有时我需要知道我的规则节点所在的父规则节点。在 的在线 API 文档中ParserRuleContext,我发现没有可以返回对象所表示的规则名称的方法/字段。我知道规则名称是子ParserRuleContext类名称的一部分,例如function_definition规则节点是 class Function_definitionContext。但要查询类名,我需要使用 Java 反射并手动Context在末尾删除字符串。

是否有更简单的方法来检索对象所代表的规则名称ParserRuleContext

查询父规则节点的名称是一个常见的需求。例如,在处理 C++ 语法时,C++ 类声明可以位于全局范围、函数定义或另一个类声明中,这意味着规则节点class_declaration可以嵌套在global_scope,function_definitionclass_declaration规则节点下。如果我只想隔离class_declaration下的那些节点global_scope,我需要查找父节点并确保它们不是function_definitionclass_declaration

antlr4

1
推荐指数
1
解决办法
3818
查看次数

ANTLR4解析器重新扫描修改后的输入

我想支持类似于C++使用ANTLR4进行预处理宏替换的功能,该功能需要解析器稍微退出并重新扫描修改后的输入文件.

例如,在标准C++中:

#define a(x) b(x+1)
#define b(x) cc(x)
#define p1 a
....
    p1(p1);
Run Code Online (Sandbox Code Playgroud)

在一个标准的C++预处理器,标识符p1将被替换为a引起a(a),然后C++预处理器将重新扫描所有该线以查看是否宏替换应再次应用到转a(a)b(a+1)终于重新扫描线来获得cc(a+1).

我可以通过TokenStreamRewriter在遍历解析树时使用ANTLR4来实现宏替换功能.但是目前在第一次替换p1with之后a,我需要保存修改后的输入文件并重新调用解析器来扫描整个输入文件并获取另一个解析树而不是仅重新扫描我已替换的行.是否有任何可能的方法将重新扫描限制为我修改的行(可能在运行中重新生成部分解析树)?输入文件很大,并且有很多这样的替换,在每次替换后重新扫描整个文件将是一个很好的性能问题.

解析器中是否有任何功能可以将解析回滚到之前的"保存点"?

antlr4

0
推荐指数
1
解决办法
472
查看次数