小编sha*_*oth的帖子

如何将包含#pragma optimize("a")的代码从VC++ 7移植到VC++ 9?

我正在将我的C++代码库从Visual Studio 2k3移动到Visual Studio 2k8.代码包含

#pragma optimize( "a", on )
Run Code Online (Sandbox Code Playgroud)

MSDN表示它意味着"假设没有别名".更高版本的VS拒绝编译这个,MSDN似乎没有说明如何处理包含此#pragma的代码.

什么"假设没有别名"意味着什么以及如何决定如何处理这行代码?

c++ compiler-construction pragma visual-studio visual-c++

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

算法的空间效率

似乎没有一个算法教科书提到太空效率,所以当我遇到要求只需要恒定记忆的算法的问题时,我真的不明白.

什么是使用常量内存和不使用常量内存的算法的算法示例?

language-agnostic algorithm space-efficiency

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

如何调用这种编写代码的方式?

我正在审查一个相当古老的项目并且第二次看到这样的代码(C++ - 就像伪代码):

if( conditionA && conditionB ) {
   actionA();
   actionB();
} else {
   if( conditionA ) {
      actionA();
   }
   if( conditionB ) {
      actionB();
   }
}
Run Code Online (Sandbox Code Playgroud)

在此代码中conditionA,对两个计算的结果进行评估,结果相同conditionB.所以代码只相当于:

if( conditionA ) {
   actionA();
}
if( conditionB ) {
   actionB();
}
Run Code Online (Sandbox Code Playgroud)

所以前一种变体只是两次代码相同的效果.如何调用编写代码的方式(我的意思是前一种变体)?

c++ language-agnostic

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

C++如何获取存储在void指针中的地址?

如何获取指针指向的值的内存地址?在我的情况下,它是一个无效指针.只是将它分配给uint给了我这个错误:

Error   1   error C2440: 'return' : cannot convert from 'void *' to 'UInt32'
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ pointers void

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

内存的动态分配

如何通过用户库管理malloc调用.我需要解释"当调用malloc时如何在用户空间中分配内存.谁管理它.就像调用sbrk()进入内核空间".

c memory memory-management

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

如何检查C++编译器生成的代码?

就像在主题中 - 是否有任何软件可以打开(什么?),在这里我甚至不知道打开什么 - 文件与目标代码或exe?我今天的问题(如果只是今天;))可能看起来有点奇怪,但我正在通过BS的"C++编程语言"进行练习,有时我只是坚持特定的问题.我有时会对这本书的风格(在很多方面都很出色)感到有点恼火,他(BS)会在他的书中提出一些你无法回答的问题,如何去做,甚至从哪里开始.像这样的例如:

运行一些测试,看看你的编译器是否真的使用指针生成迭代的等效代码,并使用索引进行迭代.如果可以请求不同程度的opimization,请查看是否以及如何影响生成的代码的质量.

这是第5章问题8.到目前为止,本书中没有提到测试和分析编译器生成的代码.无论如何,如果有人可以帮助我,我会很高兴.谢谢.

c++ compiler-construction binary

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

我可以使用Tortoise SVN为未版本控制的文件创建补丁吗?

我想创建一个补丁来反映对未版本控制文件的更改.我有"改变前"和"改变后"版本,而Tortoise Diff很乐意比较它们.我还可以使用Tortoise SVN制作反映这些变化的补丁吗?

tortoisesvn patch

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

究竟在什么情况下发送WM_ACTIVATE?

我正在尝试调试一个巨大的Win32 GUI应用程序(我有完整的源代码),该应用程序分为几个进程。问题如下:在一个进程中,我有一个带有列表框的对话框,当我双击列表框中的一个项目时,启动了另一个进程,该进程创建了自己的窗口,该窗口位于最前面并覆盖了初始对话框。如果我做了一些操作(由于我还不完全了解它们,我还不能完全解释),某些操作会迫使初始对话框开始在任务栏中闪烁。

我尝试使用Microsoft Spy ++,发现每次执行该操作时,都会将WM_ACTIVATE发送到对话框,大多数情况下,它具有以下参数:

fActive: WA_INACTIVE fMinimized:False hwndPrevious:(null)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对话框不会开始闪烁。但是有时参数是

fActive: WA_ACTIVE fMinimized:False hwndPrevious:(null)
Run Code Online (Sandbox Code Playgroud)

恰好与对话框闪烁相对应。

MSDN表示,通过鼠标单击以外的其他方法(例如,通过调用SetActiveWindow函数或使用键盘界面选择窗口)激活窗口时,将通过WA_ACTIVE发送WM_ACTIVATE 。

现在,在应用程序代码中从未调用SetActiveWindow(),并且我对可切换窗口的键盘不做任何操作。

WM_ACTIVATE与WA_ACTIVE一起发送还有哪些其他原因?

user-interface winapi visual-c++

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

OnCtrlColor不工作?

我使用以下重载方法在基于Visual C++ MFC对话框的应用程序中将列表框中的文本颜色更改为红色.当我在DEBUG模式下构建程序时,它完美地运行.但是当我使用RELEASE模式时,文本颜色不会改变.为什么这样,我怎么能克服这个问题?

谢谢!!

HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
  if(nCtlColor == CTLCOLOR_LISTBOX)
  {
     if(bChangeTextColor)
     {
       pDC->SetTextColor(RGB(255, 0, 0));
       return m_hRedBrush;
     }
  } 
  return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Run Code Online (Sandbox Code Playgroud)

mfc release-mode dialogbasedapp visual-c++ debug-mode

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

C++标准中未定义行为段落中的[Note]是什么意思?

正如用户Tony 指出的那样,在C++标准的1.3.12节中有一个[Note]

允许的未定义行为包括完全忽略不可预测的结果,在翻译或程序执行过程中以环境特征的文档化方式表现......

这与UB的定义是否相矛盾......这个国际标准没有要求吗?我的意思是他们说"没有要求",然后说"允许的UB" - 就在同一段中.

该笔记应如何解释?它确实以任何方式限制UB吗?

c++ standards iso undefined-behavior language-lawyer

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