小编Kir*_*lev的帖子

控制流程C++

int main()
{    
    char a[101];
    cout << "str a:";
    gets(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里为什么gets(a);要执行cout<<"str a:";呢?

编译器使用:数字火星和GNN_gcc.

c++

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

在 C# 中填充多维数组而不用单值循环

C# 中有没有一种方法可以在不使用循环的情况下将多维数组的每个值设置为特定值?我找到了Array.Fill但它似乎只适用于一维数组。

基本上我正在寻找的是这样的:

double[,,,] arrayToFill = new double[7,8,9,10];
Array.FillWhole(arrayToFill, 1.2345);
Run Code Online (Sandbox Code Playgroud)

当然,可以使用嵌套循环,但这看起来很烦人。也许有更好的解决方案?

c# arrays loops multidimensional-array

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

Middleware API的最佳实践是什么?

我们正在开发一个中间件SDK,用C++和Java作为库/ DLL,例如,由游戏开发者,动画软件开发人员,Avatar开发人员来增强他们的产品.

我想知道的是:开发这些类型的API是否有标准的"最佳实践"?

我在考虑可用性,可读性,效率等方面.

c++ java api middleware

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

解除分配不会释放Windows/C++应用程序中的内存

我的Windows/C++应用程序在内存中为操作员分配~1Gb的数据new并处理这些数据.处理完数据后删除.

我注意到如果我在没有退出应用程序的情况下再次运行处理,则第二次调用运算符new来分配〜1Gb的数据失败.

我希望Windows能够提供内存.使用其他一些Win32调用等可以更好地管理吗?

c++ windows winapi memory-leaks memory-management

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

为什么要使用Lexical Analyzers?

我正在使用Flex构建自己的语言,但我想知道一些事情:

  • 我为什么要使用词法分析器?
  • 他们会帮我做点什么吗?
  • 他们是强制性的吗?

lexical-analysis flex-lexer

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

如何让ANTLR输出分层AST?

我有一个Lua语法,(对C#进行输出的小修改,只是命名空间指令和几个选项更改),当我在一些示例输入上运行它时,它给了我一个根"nil"节点的树作为孩子们看起来是输入代码的标记化版本.看起来ANTLR的树语法在分层树上运行而不是"平"树,所以我认为我不能按原样使用输出.

是否有一个简单的语法修复方法,还是需要从头开始重写?

lua parsing antlr abstract-syntax-tree

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

修改.NET项目文件和引用属性

我正在开发一个应用程序(C#),它将从多个csproj文件中读取项目属性/引用(和引用的属性),并修改它们的值.

但是,在这些csproj文件中找不到像"copy-local"这样的Reference属性(在单击引用时在属性资源管理器中看到的属性).有没有办法可以访问它们并以编程方式修改它们的值?

.net c# msbuild visual-studio

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

C++良好的错误处理方法

我开始用C++编写一些代码,我从一个简单的任务管理器程序中得到了这个简单的类方法,我正在编写一个实验:

void Task::setText(string text)
{
    if(text.length() > MIN_LENGTH)
    {
        this->text = text;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此方法将class text属性设置为传递给方法的属性,如果它的长度高于MIN_LENGHT我所显示的代码上方定义的变量.因此,如果传递给方法的字符串的条件没有评估为true,我必须做一些事情.

在我买的C++书中,没有解释错误处理,而只是assert在任何地方使用它.因为如果表达式为false,断言只是中止程序,并且这是作为输入验证,我寻找更好的方法.

这次搜索引发了我对C++的例外.它解释了如何通过创建继承的类来创建异常exception.

良好的OOP实践表明,每个班级应该独立于该计划中的其他班级.那么我应该在哪里创建我创建的这个异常类?在同一个头文件中我定义了我的Task类?或者它应该在task.cpp我定义类的每个方法的地方?

也许这是一个愚蠢的问题,但只是想要保证安全,并从一开始就遵循良好的软件架构实践.

c++ exception

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

C++ DLL没有导出我的函数

我搜索了谷歌和整个网站,看起来我正在做的事与我读过的东西相匹配.我正在使用VS 2010 C++ Express.当我在DLL上调用dumpbin/exports时,我没有看到列出的任何函数.

这是我的DLL代码中唯一的东西.我需要在C++中使用任何特殊标题吗?

C++头文件:

extern "C"
{
    __declspec(dllexport) int __cdecl AddOne(int start);
}
Run Code Online (Sandbox Code Playgroud)

C++ CPP文件:

extern int __cdecl AddOne(int start)
{
    return start + 1;
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 该函数是否必须在命名空间或静态类或任何东西?我现在只是想做基础知识.

c++ visual-studio-2010 dllexport

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

c ++中的operator new,new_handler函数

这是运营商new的伪代码:

while (true)
{
    Attempt to allocate size bytes
    if (the allocation was successful) 
        return (a pointer to the memory);

    // The allocation was unsuccessful; find out what the
    // current new-handling function is 
    new_handler globalHandler = set_new_handler(0);
    set_new_handler(globalHandler);
    if (globalHandler)
        (*globalHandler)();
    else
        throw std::bad_alloc();
  }
Run Code Online (Sandbox Code Playgroud)

问题:

1)为什么第一次将0作为参数传递给set_new_handler函数?

2)它表示当分配失败时,调用new_handler函数,尝试分配momory,当且仅当不能产生更多内存时,它返回指向已分配内存的开始的指针,或者如果它不能,则抛出bad_alloc exeption或返回空指针并且else body工作,抛出bad_alloc exeption.我的问题是为什么new_handler函数有时抛出exeption,如果它可以返回空指针,否则body会这样做?

c++ memory memory-management new-operator

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