小编Pat*_*k W的帖子

使用宏WIN32或_MSC_VER跨平台

我正在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吗?

非常感谢任何建议,

c

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

在Windows上读取性能数据计数器是否需要特殊的安全权限?

我正在努力将Windows应用程序从始终作为SYSTEM帐户运行迁移到以受限用户帐户运行.此应用程序执行的许多操作之一是查询Windows性能计数器,以便记录整个系统内存和CPU使用情况.MSDN的权限常量列表含糊不清,但SE_PROF_SINGLE_PROCESS_NAME或者SE_SYSTEM_PROFILE_NAME说这可能是这种操作所必需的.然而,功能,如MSDN文档PdhOpenQuery,PdhAddCounter以及PdhCollectQueryData不提任何要求的权限.

鉴于此,查询性能数据计数器是否需要任何权限?或者,具体做什么SE_PROF_SINGLE_PROCESS_NAMESE_SYSTEM_PROFILE_NAME特权授予访问权限?

c++ security winapi performancecounter

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

&符号bug和c的生命周期

众所周知,局部变量具有局部范围和寿命.请考虑以下代码:

      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返回时仍会保留其生命周期.怎么了?请解释错误.我的理由是错的吗?

c pointers local-variables compiler-warnings

-4
推荐指数
2
解决办法
255
查看次数