在调试一些嵌入式代码时,我遇到了类似这样的事情:
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++代码,它给了我一个惊喜.问题是如果我抛出一些东西,除了在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) 我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
有重复.我错过了什么?
我发现的问题是有些人将列定义More
为bit
类型!
我是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
不起作用。顺便说一句,如果我替换sls
为findstr
,它会起作用。
例如,我想从两个序列中获得最大价值的列表,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
?
我有一些用于编译(和工作)的代码,现在我收到了很多以下警告.这是在我对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程序
#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(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]]
出现在捕获列表中是违法的?
我们使用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)