小编Giz*_*zmo的帖子

VS2015:如何隐藏解决方案资源管理器中的"参考"文件夹?

我有视觉工作室2015,从过去的经验,有一些人一般不想要的文件夹,兴奋地,这些(红色):

在此输入图像描述

但是,我设法通过选择"禁用外部依赖项文件夹"文件夹选项为true来降低它,并得到了这个:

在此输入图像描述

但我找不到任何禁用剩余虚拟文件夹的选项,如何禁用'References'文件夹?

c++ visual-studio visual-studio-2015

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

将C数组分配给C++的std :: array?(std :: array <T,U> = T [U]) - 从"T [U]"到"std :: array <T,U>"不存在合适的构造函数

我试图将C数组分配给C++ std :: array.

我怎么做,最干净的方式,没有不需要的副本等?

做的时候

int X[8];
std::array<int,8> Y = X;
Run Code Online (Sandbox Code Playgroud)

我得到一个编译错误:"没有合适的构造函数存在".

c c++ arrays c++11

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

在 Rust 中允许变量阴影背后的基本原理是什么?

在 Rust 中,鼓励隐藏变量:

但是等等,程序不是已经有一个名为 guess 的变量了吗?确实如此,但 Rust 允许我们用一个新的值来掩盖之前的 guess 值。

此功能不会引入以下问题:

  • 难以遵循代码(更容易产生错误)
  • 当一个人打算访问不同的变量时访问变量(产生错误)

我根据自己的经验和以下来源获得了这些信息:1 2 3 4 5

决定包含变量阴影的根本原因是什么?

它确实具有仅创建guess而不是guess_strvs 的优势guess_int。有优点也有缺点。

是什么让 Rust 的发明者相信优点大于缺点?

编程界似乎对此存在分歧;有些语言只发出警告并阻止阴影,有些语言明确禁止,有些允许,有些甚至鼓励。理由是什么?

如果可能的话,我想了解更多,完整的答案可能包括:

  • 有哪些优点/缺点?
  • 阴影变量的用例是什么?
  • 什么时候不应该在 Rust 中使用它们?
  • 来自不同编程背景的不同人必须记住什么?(以及不要陷入哪些陷阱)

paradigms rust

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

大型嵌入式公司是否"被迫"使用旧的编程标准/编译器?

我们的讲师告诉我们,在完成我们的任务时,我们只允许使用C++ 98/C99标准,通过为编译器指定正确的标志,我们可以确保不违反此规则.

我知道这是因为人们可以学习"真正的"C或C++,无论他们选择哪一种,并且在没有任何新语言功能帮助的情况下运用这项技能(我不同意,但我是谁在争论).

在向我的讲师询问他为什么回答这个规则时(在知道我对上述答案不满意之后):"因为像嵌入式设备一样的ASML这样的老公司有旧的代码库,在切换到C11/C时可能会破坏它们++ 11).

我要求一个代码的特定现实世界/实际例子,它在C99/C11(或C++ 98/C++ 11)中编译,是标准兼容的(C99/C++ 98),但是行为上在二进制形式时非常不同 - 总结一下,问题没有得到解答.如果公司坚持旧编译器和标准的说法是正确的,那么有人可以提供我想要为自己看到的这样一段代码吗?

c c++ embedded policy standards

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

如何合并 Directory.Build.props 文件中的属性而不是覆盖属性?

我有以下Directory.Build.props文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LibraryPath>$(BOOST_ROOT)\lib32-msvc-14.2</LibraryPath>
    <IncludePath>$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LibraryPath>$(BOOST_ROOT)\lib64-msvc-14.2</LibraryPath>
    <IncludePath>$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LibraryPath>$(BOOST_ROOT)\lib32-msvc-14.2</LibraryPath>
    <IncludePath>$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LibraryPath>$(BOOST_ROOT)\lib64-msvc-14.2</LibraryPath>
    <IncludePath>$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

每当我在子文件夹(在 Visual Studio 2019 中)中加载 (C++) 项目时,该项目都会丢失所有继承的包含路径和库路径:

继承的价值观: 继承的价值观

我想这可能是因为我没有附加到IncludePathand LibraryPath,所以我这样做并更改了props文件,如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LibraryPath>$(LibraryPath);$(BOOST_ROOT)\lib32-msvc-14.2</LibraryPath>
    <IncludePath>$(IncludePath);$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LibraryPath>$(LibraryPath);$(BOOST_ROOT)\lib64-msvc-14.2</LibraryPath>
    <IncludePath>$(IncludePath);$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LibraryPath>$(LibraryPath);$(BOOST_ROOT)\lib32-msvc-14.2</LibraryPath>
    <IncludePath>$(IncludePath);$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LibraryPath>$(LibraryPath);$(BOOST_ROOT)\lib64-msvc-14.2</LibraryPath>
    <IncludePath>$(IncludePath);$(BOOST_ROOT)\</IncludePath>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

然后重新加载项目,再次导致继承值丢失。

我仔细检查了宏是否存在,它们是(VC_WindowsSDK_宏):

宏存在

我还尝试更改Directory.Build.propsDirectory.Build.targets使其在项目加载后加载,但文件根本没有加载。

如何确保我的Directory.Build.props继承默认值并附加我的自定义选项?

我想要这样做的原因是因为我正在迁移已弃用的Microsoft.Cpp.Win32.user.props …

msbuild msbuild-15 visual-studio-2019

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

是否可以限制DLL功能?

假设我希望我的客户能够为他们的应用程序创建插件,但我不想让他们破解我的程序内存,是否有可能阻止这种情况?

或者将DLL加载到一种无法访问主程序存储器的内存区域?

c++ windows security dll limit

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

_Noreturn in a c in c:error:expected specifier-qualifier-list before'_Noreturn'

我正在尝试编译一段包含_Noreturn的代码:

#ifndef SOMEHEADER_H
#define SOMEHEADER_H

#include <stdalign.h>
#include <stdbool.h>
#include <stdint.h>

extern struct s {

    _Noreturn void (*somenoreturnfunc)(bool);
} svar;

#endif
Run Code Online (Sandbox Code Playgroud)

这给了我:

error: expected specifier-qualifier-list before '_Noreturn' 上: _Noreturn void (*somenoreturnfunc)(bool);

所以我从这里尝试了这个建议:

#ifndef SOMEHEADER_H
#define SOMEHEADER_H

#include <stdalign.h>
#include <stdbool.h>
#include <stdint.h>

#include "noreturn.h"

extern struct s {

    noreturn void (*somenoreturnfunc)(bool);
} svar;

#endif
Run Code Online (Sandbox Code Playgroud)

noreturn.h:

#ifndef NO_RETURN_H
#define NO_RETURN_H
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define noreturn _Noreturn
#elif defined(__GNUC__)
#define noreturn __attribute__((noreturn))
#else
#define noreturn
#endif
#endif …
Run Code Online (Sandbox Code Playgroud)

c gcc c11 noreturn

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

结构变量成员后的花括号是什么意思?

在一些维护(Valgrind'ing)期间,我遇到了这个代码:

#pragma pack(push, 1)
struct somename
{
  uint16_t a{};
  uint16_t b{};
  uint32_t  c{};
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

我希望{}告诉编译器始终将值初始化为 0(使用 new 或使用堆栈变量分配时),但我找不到任何示例或文档。我在这个假设中正确吗?如果不:

{}struct 成员变量后的花括号是什么意思?

c++ initialization c++11

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

如果只有0才能在octed中启用一个位?

例如,我有以下号码:

0x FF 00 FF
Run Code Online (Sandbox Code Playgroud)

现在,我希望00部分只有在它为0时才是1.我需要检查每个字节还是有一个可以在这里使用的位技巧?

例:

我有一个无符号长IP,我用字符串函数散列它,但函数终止于空字节,所以我需要将所有空字节设置为1:

0x7F000001(127.0.0.1,可以是0x0100007F但是依赖于平台)

现在,我想将0字节变为1:

0x7F010101(因此它将变为127.1.1.1)

这是实现我想要的唯一方式

char ip_sz[5];

*(unsigned long*)ip_sz = ulong_ip;

if (!ip_sz[0]) ip_sz[0] = 1;
if (!ip_sz[1]) ip_sz[1] = 1;
if (!ip_sz[2]) ip_sz[2] = 1;
if (!ip_sz[3]) ip_sz[3] = 1;
Run Code Online (Sandbox Code Playgroud)

真的,好奇心.我不关心性能,因为我知道编译器无论如何都会优化它.

c bit-manipulation bit

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

在Windows中的特定地址分配数据?

我正在四处寻找要做的事情,我有了在 Windows 中的特定地址分配内存的想法。

所以我在 stackoverflow 上阅读了一些问题,但没有一个真正提供一个有效的例子,所以我不得不想出我自己的,因为我真的很想尝试:

#include <Windows.h>
#include <iostream>

struct Variable {
    int var;
};

#define ACCESS() ((Variable*)0x50000000)

int main()
{
    DWORD ptr;
    VirtualAlloc((void*)0x50000000,sizeof(Variable),MEM_COMMIT | MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE);                    
    VirtualProtect((void*)0x50000000,sizeof(Variable),PAGE_READWRITE,&ptr);
    ACCESS()->var = 5;
    while(!GetAsyncKeyState('Q')){}
}
Run Code Online (Sandbox Code Playgroud)

但这总是会导致访问冲突..

在特定地址分配数据的正确方法是什么?因为,这种方式以某种方式行不通......同时与“为什么不呢?”混淆。


编辑:

第一个答案后的第二个代码也不起作用:

#include <Windows.h>
#include <iostream>

struct Variable {
    int var;
};

#define ACCESS() ((Variable*)0x50000000)
int main()
{   
    std::cout << VirtualAlloc((void*)0x50000000,sizeof(Variable),MEM_COMMIT,PAGE_READWRITE) << std::endl;
    std::cout << GetLastError() << std::endl;
    ACCESS()->var = 6;
    std::cout << ACCESS() << std::endl;
    while(!GetAsyncKeyState('Q')){}
}
Run Code Online (Sandbox Code Playgroud)

返回值为 0,表示失败,GetLastError() 等于 487,

和 …

c++ windows memory-management

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

标准对单个if语句中单个变量的双重比较有何看法?

我在ideone和Visual Studio 2013上尝试了这个代码:

int main()
{
    int x = 5;
    if(4 < x < 6)
    {
        return 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在ideone上产生运行时错误,但在VS上完全正常.

该标准对这种不一致的行为有何评价.我知道有编译警告,但我想知道为什么这不是原生/官方支持?

c++

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