在一个软件项目(一些旧的C编译器)上,我们有很多变量必须保存正常和反转.
有人知道如何制作这样的宏吗?
SET(SomeVariable, 137);
Run Code Online (Sandbox Code Playgroud)
哪个会执行
SomeVariable = 137;
SomeVariable_inverse = ~137;
Run Code Online (Sandbox Code Playgroud)
编辑:
最好的解决方案似乎是:
#define SET(var,value) do { var = (value); var##_inverse = ~(value); } while(0)
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答
我有一个自定义的Qt小部件,我用来显示反汇编,我希望添加语法着色.
目前,我只是将其设置QPen为纯色,构造我想要显示的文本,并将其渲染到QPainter适当的坐标.
问题是,添加语法着色的最佳方法是什么?我想到了一些:
std::pair<QColor, QString>,然后我可以简单地迭代列表设置颜色并绘制文本,因为我从列表的前面弹出项目.我知道我列出的3种方法中的每一种都在技术上有效,但我正在寻找一种非常有效的解决方案.这段代码将被大量调用.由于这是一个交互式调试器,如果此代码速度很慢,快速踩踏或跟踪的人会看到明显的减速.
编辑:我知道QSyntaxHighlighter和QTextDocument.主要问题是这些通常不能很好地满足我的目的.我有几个列都有分隔线,可以来回滑动.为了给你一个想法,这是我的调试器截图的链接.正如您所看到的,它根本不像文本文档.实际上它更接近列表或表格.但是已经有一堆定制绘图正在进行,使得正常QTextDocument有点不切实际.
编辑:我是不正确的,似乎QTextDocument可以直接渲染到QPainter.看起来像我需要的!
编辑:目前还不清楚如何控制在哪里,如何QTextDocument或QTextLayout将绘制QPainter.我试图用它们无济于事.因此,如果有人可以提供一个基本的例子,那将非常有帮助.
编辑:我最终能够得到我想要的东西,使用这样的东西:
painter.setPen(default_color);
QTextDocument doc;
doc.setDefaultFont(font());
doc.setDocumentMargin(0);
doc.setPlainText(text);
highlighter_->setDocument(&doc);
painter.save();
painter.translate(x, y);
QAbstractTextDocumentLayout::PaintContext context;
context.palette.setColor(QPalette::Text, painter.pen().color());
doc.draw(&painter, context);
painter.restore();
Run Code Online (Sandbox Code Playgroud) int ungetc(int c, FILE *fp)将字符c推回fp,并返回c或EOF错误.
其中int putc(int c, FILE *fp)将字符c写入文件fp并返回写入的字符,或者返回EOF错误.
//这些是K&R的陈述.我发现自己很困惑,因为putc()可以在以后使用getc并且可以工作ungetc.那么具体定义的用途是什么ungetc().
我正在尝试使用long12位数字,但是它说"整数常量对于"long"类型来说太大了",我尝试使用C++和Processing(类似于Java).发生了什么,我应该用它做什么?
我在getaddrinfo调用上遇到了分段错误,无法找出原因.它发生在我的服务器和客户端上.一些代码(服务器端)是 -
class TcpServer {
public:
TcpServer(int);
~TcpServer();
void launchServer();
void communicate();
private:
const char* port;
int fd;
int comm_fd;
};
Run Code Online (Sandbox Code Playgroud)
在tcpserver.cpp-
void TcpServer::launchServer() {
int status;
struct addrinfo hints;
struct addrinfo *servinfo; //will point to the results
//store the connecting address and size
struct sockaddr_storage their_addr;
socklen_t their_addr_size;
//socket infoS
memset(&hints, 0, sizeof hints); //make sure the struct is empty
hints.ai_family = AF_INET; //local address
hints.ai_socktype = SOCK_STREAM; //tcp
hints.ai_flags = AI_PASSIVE; //use local-host address
//get server info, put …Run Code Online (Sandbox Code Playgroud) 我正在使用free来释放在递归函数中为一堆临时数组分配的内存.我会发布代码,但它很长.当我注释掉这些free()调用时,程序运行不到一秒钟.但是,当我使用它们时,程序运行大约需要20秒.为什么会发生这种情况,如何解决?这就像100左右的MB所以我宁愿不要只留下内存泄漏.
此外,当我运行包含所有启用了性能分析的free()调用的程序时,它会在不到一秒的时间内运行.我不知道这会产生什么影响,但确实如此.
在仅使用一些free()调用之后,似乎有一些特别会导致程序变慢.其余的似乎没有效果.
好的......这是所要求的代码:
void KDTree::BuildBranch(int height, Mailbox** objs, int nObjects)
{
int dnObjects = nObjects * 2;
int dnmoObjects = dnObjects - 1;
//Check for termination
if(height == -1 || nObjects < minObjectsPerNode)
{
//Create leaf
tree[nodeIndex] = KDTreeNode();
if(nObjects == 1)
tree[nodeIndex].InitializeLeaf(objs[0], 1);
else
tree[nodeIndex].InitializeLeaf(objs, nObjects);
//Added a node, increment index
nodeIndex++;
return;
}
//Save this node's index and increment the current index to save space for this node
int thisNodeIndex = nodeIndex;
nodeIndex++;
//Allocate memory for split …Run Code Online (Sandbox Code Playgroud) 我创建了一个C++程序,以测试通过函数引用传递参数的功能.
#include <iostream>
using namespace std;
int f(int &b) {
b = b + 1;
cout << b << endl;
return b;
}
int main() {
int t = 10;
cout << f(t) << " " << t << endl;
//cout << f(&t) << " " << t << endl;
system("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
能否请您解释为什么这个程序不会影响t执行f函数后的值?b传递的参数是引用,所以我认为它的值会在程序执行后发生变化,因为我正在使用main函数中的实际变量,而不是它的副本.在这种情况下,我希望它是11,但它不受程序执行的影响.
为什么会这样?
我有以下简单的代码:
for (float i=0; i<1f; i+=0.1) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
我刚刚得到以下结果:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Run Code Online (Sandbox Code Playgroud)
但我无法理解为什么会这样.拜托,我希望你能告诉我.谢谢.
好吧,我通常默认假设错误在我的代码中,但我所看到的对我来说几乎没有意义.
我有一个std::vector<DocumentWidget *>,我希望通过一些相对简单的算法进行排序.这就是我所看到的.
代码如下所示:
std::vector<DocumentWidget *> documents = DocumentWidget::allDocuments();
// NOTE(eteran): on my system, I have observed a **consistent** crash
// when documents.size() == 17 while using std::sort.
std::sort(documents.begin(), documents.end(), [](const DocumentWidget *a, const DocumentWidget *b) {
int rc = (a->filenameSet_ == b->filenameSet_) ? 0 : a->filenameSet_ && !b->filenameSet_ ? 1 : -1;
if (rc != 0) {
return rc < 0;
}
if(a->filename_ < b->filename_) {
return true;
}
return a->path_ < b->path_;
});
Run Code Online (Sandbox Code Playgroud)
看起来很简单,但是当我在列表中有第17个项目时它会崩溃!排序谓词显然没有vector以任何方式修改,所以我看不出这是一个问题.地址清理器和valgrind在此之前没有显示任何错误. …