小编phu*_*clv的帖子

如何修复警告:"签名和未签名之间的比较"?

我被建议在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)

但是,当我必须使用这些编译器选项将带符号值与无符号值进行比较时,它无法解决一般问题.是否有更清洁的方式而不是铸造?

c

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

在机器之间复制git本地分支?

好的,所以我在两台机器上跟踪远程仓库,因此两者都有主分支.我还在笔记本电脑上创建了一个名为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)

git

14
推荐指数
1
解决办法
8426
查看次数

C#计算在const和variable locals之间有所不同?

我正在为我的同事设置一个关于 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”之类的东西并没有立即有用。

所以我的问题是,任何人都可以用“这只发生在编译器在平台 …

c# double mono constants

14
推荐指数
1
解决办法
199
查看次数

给定 x&gt;0,sqrt(x) = 0 是否可能给出浮点错误?

标题中的问题。

我有一段代码:

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)

c++ floating-point

14
推荐指数
1
解决办法
562
查看次数

批处理文件中的浮点除法

我需要在dos批处理中进行浮点除法.

我没有办法做到这一点.像这样的东西:

SET /A Res=10/3
Run Code Online (Sandbox Code Playgroud)

返回一个整数.

有可能吗?

batch-file

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

多序列的最长公共子序列

我已经做了一堆研究,找到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)

c algorithm dynamic-programming

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

命令提示符卡住并继续按回车键

当命令提示符正在运行一个进程然后它卡住并且进程也在睡眠时,是否有人遇到过这种情况。然后,当我们Enter在 cmd 窗口中按下键时,该过程将继续。

有什么办法可以避免这种情况吗?或者这可以处理吗??

windows console cmd

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

以统一格式使用指令有什么好处?

许多处理器具有统一格式和宽度的指令,例如ARM,其中所有指令都是32位长.其他处理器具有多个宽度的指令,例如长度为2,3或4个字节,例如8086.

  1. 使所有指令具有相同宽度和统一格式的优点是什么?
  2. 使用多个宽度的指令有什么好处?

encoding cpu-architecture variable-length instructions fixed-width

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

成员函数的函数签名是什么?

我无法理解函数签名和指针.

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::*)()指向带签名的函数是什么?

c++ pointers function

13
推荐指数
2
解决办法
2142
查看次数

尝试使用 IIS Express 进行调试时 SSL_ERROR_UNSUPPORTED_VERSION

创建了一个新模板 ASP.Net Core 3.1 MVC Web 应用程序。当我尝试使用 IIS Express 调试它时,我在 Firefox 中收到以下错误:

安全连接失败

连接 localhost:44354 期间发生错误。对等方使用不受支持的安全协议版本。

错误代码:SSL_ERROR_UNSUPPORTED_VERSION

我尝试使用 MMC 删除所有本地主机证书,修复 IIS Express 以安装新证书。当尝试调试时,它要求我信任该证书,我按“是”,但仍然出现此错误。

如果这很重要的话,我使用的是Windows 7。

c# iis ssl firefox asp.net-core

13
推荐指数
2
解决办法
6万
查看次数