解析C++的问题是众所周知的.它不能纯粹基于语法进行解析,它不能像LALR那样完成(无论术语是什么,我不是语言理论家),语言规范是一个很多页面等等.由于这个和其他原因我为我的个人项目决定另一种语言.
Vala看起来很好.虽然提供了许多比C++更多的改进,但解析起来同样麻烦吗?或者它有一个整洁,合理的长度形式语法,或一些逻辑描述,适合构建编译器,源分析器和其他工具的解析器?
无论答案是什么,Genie替代语法都是如此?
(我也很想知道D和其他后C++非VM语言不太强烈.)
Vala语言编译器可以处理非常不同的语法Genie,可以说它可以被认为是一种语言的不同语言或替代语法.AFIK,你可以在Vala做的任何事情,你可以写Genie(忽略正在进行的细节,错误)让任何不喜欢花括号的人高兴.
是否有一些语言或替代语法与Genie与Vala的标准C++具有相同的关系?它应该允许做任何可能在C++中做的事情.(它不需要普通的C++编译器可读,但是 - 我不希望在这个时间点.)
(附带问题:Genie/Vala是我现在能想到的唯一例子.还有其他例子吗?)
如何使用文件LPT1直接打印到C#中的点阵打印机.
我用Copen在C++上做过,但我不知道如何在c#中做到这一点.
非常感谢你
我已经使用过Subversion(从前十年开始插入年份),但现在我在使用CVS的公司.对于从旧版本控制系统到新版本的人来说,有大量的操作指南,教程,备忘单等,但对于我们中的少数人来说,采用"错误"的方式有什么用呢?
我正在为svn,git或其他流行系统寻找适合当前经验丰富的开发人员的秘籍表,技巧,陷阱.不需要用于版本控制新手的东西,或者文章颂扬CVS的优点,而不是在"64K RAM足够多"的日子里使用的东西.
Eclipse文档和网站对我来说仍然有点太厚,一个完整的Eclipse noob.有人可以解释一下适合非IDE用户的观点是什么,以及制作新观点的内容是什么?
到目前为止,我猜测"透视"仅仅是Eclipse中窗口的固定排列,并且可以为项目中不同的工作阶段选择其中一个.但我得到的印象是它更大更强大.
"visual studio x64 win64命令提示符","visual studio x64交叉工具命令提示符"和"可视工作室命令提示符"出现在"开始"按钮的Visual Studio 2010菜单中有什么区别?
对于最有用的答案,让我们清楚一下我的无知程度:在微软或IDE的任何领域,我都比大师更接近noob.Linux的长期专家,在纯文本编辑器中编辑源代码,手工制作Makefiles等.
我确信这些差异很简单,对于在VS2010拥有适度经验的人来说可能是"显而易见的".
Here is a very small source file in D:
void main()
{
}
Run Code Online (Sandbox Code Playgroud)
and here objdump's disassembly of the .o file:
Disassembly of section .text._Dmain:
0000000000000000 <_Dmain>:
void main()
0: 55 push %rbp
1: 48 8b ec mov %rsp,%rbp
4: 31 c0 xor %eax,%eax
{
6: 5d pop %rbp
7: c3 retq
Run Code Online (Sandbox Code Playgroud)
The compiler is DMD64 D Compiler v2.056 running on an x86_64 Linux machine.
What I wonder is why only 32-bit EAX is being cleared rather than the whole …
在C++ 14程序中,我给了一个类似的字符串
std::string s = "MyFile####.mp4";
Run Code Online (Sandbox Code Playgroud)
和0到几百的整数.(它永远不会是一千个或更多,但只有四个数字.)我想####用整数值替换" ",根据需要使用前导零来匹配'#'字符数.什么是灵活的C++ 11/14修改s或生成这样的新字符串的方法?
通常我会使用char*字符串snprintf(),strchr()并找到" #",但我应该得到现代和std::string更频繁使用,但只知道它的最简单的用途.
用户通过QFileDialog在我们的应用程序中打开文件.文件名的顺序很奇怪.什么是确定排序顺序,我们如何使它按文件名排序,或以其他方式强加我们自己的排序,也许给它一个指向我们自己的比较函数的指针?
文档和在线论坛没有帮助.除非它被很好地隐藏,否则似乎没有任何排序方法,属性等.
这是一个主要的Linux应用程序,但也可以在Mac上运行.(我对Mac一无所知.)
这是源代码的多汁部分:
QtFileDialog chooser(parent, caption, directory, filter);
/// QtFileDialog is our class derived from QFileDialog
chooser.setModal(true);
chooser.setAcceptMode(acceptMode);
chooser.setFileMode(fileMode);
QStringList hist = chooser.history();
chooser.setHistory(hist);
/* point "x" */
if(chooser.exec()) {
QStringList files = chooser.selectedFiles();
...blah blah blah...
Run Code Online (Sandbox Code Playgroud)
从其中一个答案中,我尝试了一个邪恶的实验,在"点x"处添加了这个不明智的猜测代码:
QSortFilterProxyModel *sorter = new QSortFilterProxyModel();
sorter->sort(1); // ???
chooser.setProxyModel(sorter);
Run Code Online (Sandbox Code Playgroud)
但是,在这个代码级别的33个子程序调用中,这一点大为震惊.我承认,即使在阅读了Qt4文档和示例代码之后,我也不知道QSortFilterProxyModel的正确用法.
在表单上,我有两个控件,A和B.每个控件在其值发生变化时发送一个事件.Form通过将B设置为某个值来处理A的ValueChanged事件,并通过设置A的值来设置B的ValueChanged.
我是否需要做一些特殊的事情以防止无限循环,其中用户更改A,发送一个导致B更新的ValueChanged事件,现在将其发送给ValueChanged事件,导致A更新...
我知道一些GUI工具包,比如Qt,在基础设施中内置了逻辑,以防止这样的循环.(请参阅Qt4上Blanchette&Summerfield书籍第1章中的"输入您的年龄"示例.)一些较旧的工具包需要程序员定义和管理标志以检测递归.对于WinForms,我还没有在任何地方阅读确定的声明.
举一个具体的例子,假设A和B是NumericUpDown控件,以华氏度和摄氏度显示温度.当用户更改一个时,另一个更新以显示另一个系统中的相应温度.