小编Don*_*alo的帖子

如果在调试版本中打开编译器优化,会出现什么问题?

为什么在调试应用程序时必须/建议关闭所有编译器优化?

背景

我正在使用一个8位微控制器(OKI 411),它有15K可用代码存储空间用于中断服务程序+ ROM区域/窗口(const全局变量)+代码.我们差不多吃了大约13K,所以在调试过程中打开最大可能的优化非常诱人.

compiler-construction microcontroller compiler-optimization

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

一个非常特殊的编译器问题

我在C中编写了PIC16F1947的代码.我使用以下代码:

  • MPLAB IDE 8.73
  • HI-TECH C编译器9.81

代码的一部分处理来自PC的数据.我从PC发送的特定数据包是325字节.此数据包如下所示:

data:  0, 64, 1, 0, 255, 255, 255, ... (all 255) ..., 255,   1
index: 0   1  2  3    4    5    6                     323  324
Run Code Online (Sandbox Code Playgroud)

数据包的内容显示为8位十进制值(8位无符号整数).微商店将其存储在以下阵列中unsigned char:

unsigned char _command_mgr_buff[330];
Run Code Online (Sandbox Code Playgroud)

unsigned char 是PIC16F的8位无符号整数.

分组的最后一个字节,即索引324,是分组的校验和.它是索引1到323的总和,包括1和323.计算此校验和的PC代码(在C#中)如下:

allCertPages[324] = 0;
for (int i = 1; i <= 323; i++)
{
    allCertPages[324] += allCertPages[i];
}
Run Code Online (Sandbox Code Playgroud)

allCertPages是一个byte[].

微必须验证校验和确实是从PC传递的值.这是我为PIC16F编写的验证码,包括一些调试信息:

param0 = _command_mgr_buff[324]; // param0 is unsigned int, 16 bit
param1 = _command_mgr_buff[324]; // param1 is …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction embedded microcontroller

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

按照声明的顺序在PropertyGrid中显示项目

是否可以按照声明方式在UI中显示PropertyGrid项?我发现它们首先按CategoryAttribute排序,然后按DisplayName属性按升序排序.

我正在使用Visual Studio 2010 Ultimate的.NET 3.5版.

编辑

该应用程序是一个WPF应用程序.

.net c# propertygrid

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

如何终止QThread?

QThread::terminate()文档声明不鼓励通过调用此函数来终止线程.
在我的程序中,我需要在完成执行之前终止一个线程.线程正在执行一些繁重的计算,我希望用户有控制权来停止计算.
我怎么能这样做而不是打电话QThread::terminate()

c++ qt qthread

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

用PHP计算两个日期?

我有以下格式的两个日期:

开课日期= 2009年10月30日

结束日期= 2009年11月30日

如何用PHP来计算这两个日期之间的秒数?

php date

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

哪个winapi功能允许我更改登录用户的密码?

我正在寻找一个winapi允许我更改当前登录用户密码的功能.在我的情况下,我知道登录用户的当前密码.我使用Windows 7旗舰版.

谢谢.

背景

背景看起来很奇怪,但我将描述它以便澄清.我的个人家用电脑被几个用户(爸爸,姐妹,表兄弟等)使用.我是PC的唯一管理员.所有其他人都是标准用户.所有用户帐户都受密码保护.

我不喜欢其他人使用我的帐户,因为他们搞乱任何事情.我总是从我的帐户安装所有软件,并对PC进行故障排除.当我离开我的电脑数周时,可能是其他一些用户需要安装软件,或做一些需要管理权的事情.出于这个原因,他们可能需要使用我的帐户.可能存在紧急情况,我必须允许用户通过提供帐户密码登录我的帐户.

我最近遇到了这种情况.在离开我的电脑很长一段时间之前,我将常规密码更改为其他密码.当我到达我的电脑时,我会再次改变它.

所以我想写一个小程序,每次有人登录我的帐户时都会运行.该程序只会将当前密码更改为我只知道的其他密码.在这种情况下,如果有人登录我的帐户,安装一些东西,注销,并且在密码更改时无法重新登录.

假设我将帐户的密码设置为abcd.当有人登录时,程序会将其更改为abcde.下次可能是abc123等等.

c c++ winapi

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

在Windows 7操作系统上恢复默认GUI QStyle

我正在使用Windows 7 Ultimate 32位上的Qt 4.7编写GUI应用程序.我想让用户从主菜单中更改GUI样式.可以从菜单中选择几个QStyles(QCDEStyle,QWindowsStyle,QCleanlooksStyle等),我用它QApplication::setStyle()来设置新样式.

我想有一个选项可以返回到Windows 7的默认样式.默认样式,我的意思是QApplication::style()在明确使用任何样式之前使用返回的样式QApplication::setStyle().以下是不起作用的尝试:

QStyle *default_style;

// During initialization of QMainWindow
default_style = QApplication::style();

// When default style is chosen from main menu
QApplication::setStyle(default_style);
Run Code Online (Sandbox Code Playgroud)

以上将无法工作,因为QApplication::setStyle()取得对象的所有权并删除以前QStyle*.

如何将QApplication样式更改为默认样式?谢谢.

c++ user-interface qt

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

使用不同的软件来区分TFS文件

可能重复:
Team Foundation Server(TFS)文件差异查看器 - 使用其他工具进行自定义

我正在使用带有TFS的Visual Studio 2010 Ultimate.我不喜欢TFS的默认diff程序.

是否可以将默认差异程序更改为其他内容,如WinMerge?

tfs visual-studio-2010

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

为什么在Windows 7机器上的Qt Creator中_WIN32_WINNT == 0x400?

我正在使用基于Qt 4.7.0(32位)的Qt Creator 2.0.1.操作系统是Windows 7旗舰版(32位).

我想使用以下函数调用重新启动Windows:

ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM |
                          SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY);
Run Code Online (Sandbox Code Playgroud)

我在源代码中添加了windows.h和reason.h,并在*.pro文件的LIBS部分添加了libuser32.

在编译代码之后,Qt Creator会发出错误说明SHTDN_REASON_MAJOR_SYSTEM并且SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY未在范围中定义.

我查看了mingw附带的reason.h文件.我发现#defines里面是#if:

#if (_WIN32_WINNT >= 0x0501)
Run Code Online (Sandbox Code Playgroud)

我调查的值_WIN32_WINNT似乎是1024(0x400).

我知道这代表某种版本号,那些#define应该在特定版本之后编译.但是为什么_WIN32_WINNTWindows 7上这么低?我怎么用那些#define?我不想把直接值代替SHTDN_REASON_MAJOR_SYSTEMSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY.

c++ windows winapi qt mingw

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

相同的编译器在不同的OS上创建不同的行

我公司的一些人正在争论它.给定源代码和编译器(使用相同的标志/开关编译),编译器是否可能创建在不同操作系统中具有不同行为的二进制文件?

具体来说,我们有一个必须在Windows XP和Windows 7中运行的C#项目,都是32位.编译器是VS 2008.有一个解决方案文件(*.sln),它包含我们用来构建软件的所有必要文件,程序集,项目等.

是否有可能如果代码(相同的解决方案文件)在VS 2008中编译(具有相同的标志/开关,因为它是相同的解决方案文件)在XP中将生成一个二进制文件,其行为不同于 Windows中的编译二进制文件7?

根据行为差异我的意思是,在特定情况下......

  • XP版本将在XP中按预期运行
  • Win 7版本将在Win 7中按预期运行
  • XP版本可能会在Win 7中导致错误(可能是崩溃或某些意外行为),反之亦然

该项目太庞大,无法提出一个小测试项目.我想知道上述情况是什么情况(如果有的话).

c# compiler-construction

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

在printf中输出变量地址

如果我在Visual C++ 2017中构建并运行以下程序:

#include <stdio.h>

int main()
{
    int a[3] = { 0 };

    for (int i = 0; i < 3; i++)
    {
        printf("%llu %u %p\n", a + i, a + i, a + i);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看到输出如下:

31519768560270096 7338768 000F1055
31519785740139284 7338772 000F1055
31519802920008472 7338776 000F1055
Run Code Online (Sandbox Code Playgroud)

我无法联想到.

为什么输出%llu如此不同?sizeof(int)在我的平台上是4.

为什么输出%p都相同?它们是不同变量的地址.

只有输出%u似乎是一致的 - 3个数组元素的连续内存位置,每个数组元素有4个字节.但这些输出既不匹配%llu也不匹配%p.

c pointers

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