我正在Linux(GCC 4.4.2)和Windows VS C++ Express Edition 2008下编译
我目前正在Windows XP Pro 32位下编译,并已将其添加到我的源代码中.
#if defined( WIN32 )
/* Do windows stuff here */
#endif
Run Code Online (Sandbox Code Playgroud)
但是,if语句中的代码被禁用(变灰).但是,如果我执行以下操作:
#if defined( _MSC_VER )
/* Do windows stuff here */
#endif
Run Code Online (Sandbox Code Playgroud)
if语句代码已启用.
我只是想知道,我应该使用什么.我见过很多程序员都使用WIN32.但是,似乎对我不起作用.我应该使用_MSC_VER吗?
非常感谢任何建议,
我正在努力将Windows应用程序从始终作为SYSTEM帐户运行迁移到以受限用户帐户运行.此应用程序执行的许多操作之一是查询Windows性能计数器,以便记录整个系统内存和CPU使用情况.MSDN的权限常量列表含糊不清,但SE_PROF_SINGLE_PROCESS_NAME或者SE_SYSTEM_PROFILE_NAME说这可能是这种操作所必需的.然而,功能,如MSDN文档PdhOpenQuery,PdhAddCounter以及PdhCollectQueryData不提任何要求的权限.
鉴于此,查询性能数据计数器是否需要任何权限?或者,具体做什么SE_PROF_SINGLE_PROCESS_NAME或SE_SYSTEM_PROFILE_NAME特权授予访问权限?
众所周知,局部变量具有局部范围和寿命.请考虑以下代码:
int* abc()
{
int m;
return(&m);
}
void main()
{
int* p=abc();
*p=32;
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个函数返回局部变量地址的警告.我认为这是理由:一旦abc()完成,就会释放本地可验证的m.所以我们在主函数中解除引用无效的内存位置.
但是,请考虑以下代码:
int* abc()
{
int m;
return(&m);
int p=9;
}
void main()
{
int* p=abc();
*p=32;
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到同样的警告.但我想m返回时仍会保留其生命周期.怎么了?请解释错误.我的理由是错的吗?