小编CS *_*Pei的帖子

C中的MISRA增量

在调试一些嵌入式代码时,我遇到了类似这样的事情:

buffPtr = &a[5];
buffEndPtr = &a[10];

while (buffPtr != buffEndPtr) 
{ 
    *buffPtr = 0xFF; 
    buffPtr  = &buffPtr[1];         /*  MISRA improvement for: buffPtr++ */ 
}
Run Code Online (Sandbox Code Playgroud)

为什么这个结构会改进(*buffPtr)++?

c embedded pointers misra

13
推荐指数
3
解决办法
5438
查看次数

如果我试图在C++中的catch块中抛出一些内容,为什么它会导致终止?

我有以下C++代码,它给了我一个惊喜.问题是如果我抛出一些东西,除了在catch块内重新抛出,程序将通过调用abort终止并在GCC4中给出错误消息,"在抛出'int'实例后调用终止".如果我只是用"扔"; 重新扔进catch区,一切都会好的.

#include <iostream> 
#include <exception>
#include <stdexcept>

using namespace std;

int main()
{
    try{
        throw std::string("first throw");
    }
    catch(std::string &x){
        try{
            std::cout << x << std::endl;
//          throw;  // if I use this line, all is fine.
            throw int(2); // but if I use this line, it causes Abort() to be called
        }
        catch (int &k){
            throw;
        }
        catch(...)
        {
            cout << "all handled here!"<< endl;
        }
    }
    catch(...){
        std::cout<< "never printed" << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ exception try-catch throw gcc4

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

sql server UPDATE与INNER JOIN结合使用

UPDATE在SQL SERVER中发现了以下语句的问题

UPDATE
    table_a
SET
    table_a.More = -1
FROM
    table_a
INNER JOIN
    ( SELECT column1, COUNT(*)  AS More 
      FROM table_a 
      GROUP BY column1 ) AS table_b
ON
    table_a.column1 = table_b.column1
Run Code Online (Sandbox Code Playgroud)

请注意,INNER JOIN部分使用表本身.在此之后,UPDATE我期待一些行More等于-1.但我只有1.我百分百肯定column1有重复.我错过了什么?

我发现的问题是有些人将列定义Morebit类型!

sql-server sql-update

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

为什么 sls aka select-string 不起作用

我是PowerShell的新手。今天我尝试了一些非常简单的事情

Alias  | sls -Pattern 'echo'
Run Code Online (Sandbox Code Playgroud)

哪个产生了echo,但我想要的是Alias echo -> Write-Out.

在 bash 中,你可以这样做

alias | grep 'echo'
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么sls不起作用。顺便说一句,如果我替换slsfindstr,它会起作用。

powershell

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

将函数模板作为参数传递给C++

例如,我想从两个序列中获得最大价值的列表,left以及right和保存的结果max_seq,这是所有以前定义和分配,

std::transform(left.begin(), left.end(), right.begin(), max_seq.begin(), &max<int>);
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为编译器说

 note:   template argument deduction/substitution failed
Run Code Online (Sandbox Code Playgroud)

我知道我可以在一个struct或一个内部包装"std :: max" lambda.但有没有包装directly使用的方式std::max

c++ templates

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

不推荐使用动态异常规范

我有一些用于编译(和工作)的代码,现在我收到了很多以下警告.这是在我对Ubuntu-Mate进行了一次升级之后发生的.

警告:在C++ 11中不推荐使用动态异常规范

它发生在像这样简单的行上(在标题中):

    static Value getPriorityValue(const std::string& priorityName)
    throw(std::invalid_argument);
Run Code Online (Sandbox Code Playgroud)

我得到了与此有关的2545警告!反正有没有告诉编译器忽略这个警告?更改代码的最简单方法是什么?

大多数错误都在第三方软件包中,因此我不想对此软件包进行太多修改.

我的编译器中有-std = c ++ 11标志.

c++ c++11

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

GCC中结构变量的范围规则

考虑以下C程序

#include <stdio.h>

typedef struct s {
  int x;
} s_t;

int main() {
  int x;
  s_t a;

  scanf("%d", &x);

  if (x > 0) {
    s_t a;
    a.x = x;
  }

  printf("%d\n", a.x);
}
Run Code Online (Sandbox Code Playgroud)

a在If分支结构变量明确阴影的a主结构体变量.可以预期printf中的输出将是未定义的,但是对于GCC,范围变量似乎等于主变量.

例如

gcc test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

将输出10.

另一方面,通过clang执行此操作,正如预期的那样

clang test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

输出-2145248048.

这是一个GCC错误还是存在某种未触发的行为?

gcc 4.8.2 clang 3.4

c gcc struct clang scoping

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

Lambda捕获数组元素失败

以下C++代码使编译器GCC(6.3.0)和Clang(3.8.0)变得疯狂.

for (auto v : vectors2d)
    for_each (begin(ret), end(ret), [v[3]] (int &n) { n+= v[3];});
Run Code Online (Sandbox Code Playgroud)

虽然以下情况很好

for (auto v : vectors2d) {
    auto val = v[3];
    for_each (begin(ret), end(ret), [val] (int &n) { n+= val;});
}
Run Code Online (Sandbox Code Playgroud)

我知道在C++ 14中我可以做类似的事情

for (auto v : vectors2d)
    for_each (begin(ret), end(ret), [val=v[3]] (int &n) { n+= val;});
Run Code Online (Sandbox Code Playgroud)

GCC中的错误是

expected identifier before '[' token
Run Code Online (Sandbox Code Playgroud)

克朗说

expected ',' or ']' in lambda capture list
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么[v[3]]出现在捕获列表中是违法的?

c++ lambda gcc language-lawyer clang++

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

SQL Server的浮点数小于2.23E-308(最小双精度数)

我们使用SQL Server 2014来存储来自C库的结果.最近我们发现有一些值如1.39202924295074E-309存储在一个定义为float的列中.

这很奇怪,因为基于MSDN,浮点范围是

 -1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308
Run Code Online (Sandbox Code Playgroud)

默认情况下,这与我发现的任何文献一致.

所以问题是为什么我们得到的价值小于允许的最小值?

桌子的设计就像是

CREATE TABLE [dbo].[CLibDataResult](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Result] [float] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

sql-server floating-point precision

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