我被建议在GCC中使用以下选项,因为它有助于避免许多常见错误.它会打开一堆警告并将-Werror
其变成错误.
gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror
Run Code Online (Sandbox Code Playgroud)
鉴于以下测试代码:
#include <stdio.h>
int main(void)
{
int arr[8]={0,10,20,30,40,50,60,70};
int x;
printf("sizeof(arr): %d\n", sizeof(arr));
printf("sizeof(int): %d\n", sizeof(int));
for(x = 0; x < sizeof(arr)/sizeof(int); x++)
{
printf("%d\n",arr[x]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
test.c:11: error: comparison between signed and unsigned
Run Code Online (Sandbox Code Playgroud)
我知道我能解决这个问题的一种方法就是关闭警告,但是他们还没有让我使用这些设置来最终关闭它们.
另一种方法是投射东西,但我被告知铸造已被弃用.
另外,我可以将x变为unsigned int
:
unsigned x;
Run Code Online (Sandbox Code Playgroud)
但是,当我必须使用这些编译器选项将带符号值与无符号值进行比较时,它无法解决一般问题.是否有更清洁的方式而不是铸造?
好的,所以我在两台机器上跟踪远程仓库,因此两者都有主分支.我还在笔记本电脑上创建了一个名为development的本地分支.有没有办法让我将本地分支复制到我的台式计算机上?我会使用我的笔记本电脑,但出于某种原因我遇到了gdb和emacs的麻烦......
编辑:这对我有用
git remote add laptop [username]@hostname:/path/to/repo
git fetch laptop
git checkout --track -b development laptop/development
git pull
Run Code Online (Sandbox Code Playgroud) 我正在为我的同事设置一个关于 C# 在Math.Round
函数中使用的银行家舍入方法的快速测验。但是在 repl.it 中准备问题时,我得到了一个我认为很奇怪的结果。起初我使用的是一个数组,但我已经设法将它归结为这个片段以找到一个小的复制场景:
class MainClass {
public static void Main (string[] args) {
double x = 10.5;
System.Console.WriteLine(format: "Math.Round({0}) = {1}",
arg0: x,
arg1: System.Math.Round(x));
const double y = 10.5;
System.Console.WriteLine(format: "Math.Round({0}) = {1}",
arg0: y,
arg1: System.Math.Round(y));
}
}
Run Code Online (Sandbox Code Playgroud)
这导致以下输出:
Math.Round(10.5) = 10
Math.Round(10.5) = 11
Run Code Online (Sandbox Code Playgroud)
(我也用decimal
数字尝试过,这并没有导致计算方法之间有任何差异:两者的结果都是 10,根据银行家的舍入规则是正确的。)
现在,我猜这可能与const double
预编译版本有关,但我希望 - 而且我不确定这是否合理 - 预编译版本使用相同的规则进行舍入和/或(我'我不确定确切的原因是什么)遭受完全相同的舍入误差 - 实际上,我希望它执行完全相同的计算,只是在不同的时间。
很难找到有关此行为的更多信息,部分原因是我不确定我是否遇到了错误Math.Round
(显然也有一些问题)或与预编译相关const
的问题允许,但我猜是后者 - 搜索“c# const different result”之类的东西并没有立即有用。
所以我的问题是,任何人都可以用“这只发生在编译器在平台 …
标题中的问题。
我有一段代码:
double ccss = c * c + s * s;
double sqrtCCSS = sqrt(ccss);
if (sqrtCCSS != 0)
{
n = n1 / sqrtCCSS;
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道这是否安全:
double ccss = c * c + s * s;
if (ccss != 0)
{
n = n1 / sqrt(ccss);
}
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我是的,但浮点错误仍然有些神秘。
更新:
至少对于 Python 来说,到目前为止这似乎是不可能的:
double ccss = c * c + s * s;
double sqrtCCSS = sqrt(ccss);
if (sqrtCCSS != 0)
{
n = n1 / sqrtCCSS;
} …
Run Code Online (Sandbox Code Playgroud) 我需要在dos批处理中进行浮点除法.
我没有办法做到这一点.像这样的东西:
SET /A Res=10/3
Run Code Online (Sandbox Code Playgroud)
返回一个整数.
有可能吗?
我已经做了一堆研究,找到M = 2序列的最长时间,但我想弄清楚如何为M≥2序列做到这一点
我被赋予N和M:M序列,具有N个独特元素.N是{1 - N}的集合.我已经考虑过动态编程方法,但我仍然对如何实际合并它感到困惑.
示例输入
5 3
5 3 4 1 2
2 5 4 3 1
5 2 3 1 4
Run Code Online (Sandbox Code Playgroud)
这里的最大序列可以看出来
5 3 1
Run Code Online (Sandbox Code Playgroud)
预期产出
Length = 3
Run Code Online (Sandbox Code Playgroud) 当命令提示符正在运行一个进程然后它卡住并且进程也在睡眠时,是否有人遇到过这种情况。然后,当我们Enter在 cmd 窗口中按下键时,该过程将继续。
有什么办法可以避免这种情况吗?或者这可以处理吗??
许多处理器具有统一格式和宽度的指令,例如ARM,其中所有指令都是32位长.其他处理器具有多个宽度的指令,例如长度为2,3或4个字节,例如8086.
encoding cpu-architecture variable-length instructions fixed-width
我无法理解函数签名和指针.
struct myStruct
{
static void staticFunc(){};
void nonstaticFunc(){};
};
int main()
{
void (*p)(); // Pointer to function with signature void();
p = &myStruct::staticFunc; // Works fine
p = &myStruct::nonstaticFunc; // Type mismatch
}
Run Code Online (Sandbox Code Playgroud)
我的编译器说类型myStruct::nonstaticFunc()
是void (myStruct::*)()
,但不是指向它的指针类型?
我问,因为当你创建一个std::function
对象时,你传递了你想要它指向的函数的函数签名,比如:
std::function<void()> funcPtr; // Pointer to function with signature void()
not
std::function<void(*)()> funcPtr;
Run Code Online (Sandbox Code Playgroud)
如果我不得不根据void()
我会说的模式猜测:
void myStruct::();
or
void (myStruct::)();
Run Code Online (Sandbox Code Playgroud)
但这不对.我不明白为什么我应该添加一个星号,因为它是非静态的而不是静态的.换句话说,指针void(* )()
指向带签名的函数void()
,而指针void(myStruct::*)()
指向带签名的函数是什么?
创建了一个新模板 ASP.Net Core 3.1 MVC Web 应用程序。当我尝试使用 IIS Express 调试它时,我在 Firefox 中收到以下错误:
安全连接失败
连接 localhost:44354 期间发生错误。对等方使用不受支持的安全协议版本。
错误代码:SSL_ERROR_UNSUPPORTED_VERSION
我尝试使用 MMC 删除所有本地主机证书,修复 IIS Express 以安装新证书。当尝试调试时,它要求我信任该证书,我按“是”,但仍然出现此错误。
如果这很重要的话,我使用的是Windows 7。