小编Gre*_*enn的帖子

为什么C#针对ushort上的模算法发出错误“无法将int隐式转换为ushort”?

在另一个线程中,有人问为什么将两个ushort值相加会引起C#错误。例如

ushort x = 4;
ushort y = 23;
ushort z = x+y;  // ERROR cannot implicitly convert int to ushort 
Run Code Online (Sandbox Code Playgroud)

在该线程上,人们认为加号+运算符默认情况下采用两个整数,并且这是一种有助于避免算术溢出的语言功能。但是我在以下函数中遇到了相同类型的错误:

public RGB(ushort red, ushort green, ushort blue)
{
    // this class RGB has three ushort fields: r, g, and b
    r = red % ((ushort)256);
    g = green % ((ushort)256);
    b = blue % ((ushort)256);
}
Run Code Online (Sandbox Code Playgroud)

编译器出错并说“无法将类型'int'隐式转换为'ushort'。存在显式转换...”。但是,这里所说的模%运算符可以防止溢出的说法根本没有任何意义:如果x和y是ushort值,则x%y < max(x,y),因此不存在溢出为整数的风险。那我为什么会收到这个错误?

c# integer-overflow

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

是否可以定义没有temp/aux变量的指针?(或者这是不好的C编码?)

我正在努力理解C指针.作为背景,我已经习惯了在这两个编码C#Python3.

我知道指针可用于保存变量的地址(写出类似的东西type* ptr = &var;),并且递增指针相当于递增该对象类型的对象数组的索引type.但我不明白的是你是否可以使用type(例如int)的指针和引用对象而不引用已经定义的变量.

我想不出一种方法可以做到这一点,并且大多数C/C++指针的例子似乎都使用它们来引用变量.所以我可能要问的是编码实践不可能和/或不好.如果是这样,了解原因会有所帮助.

例如,为了澄清我的困惑,如果在没有使用预定义的硬编码变量的情况下无法使用指针,为什么要使用指针而不是直接使用基本对象,或者使用对象数组?

下面有一小段代码正式描述我的问题.

非常感谢任何建议!

// Learning about pointers and C-coding techniques.

#include <stdio.h>

/* Is there a way to define the int-pointer age WITHOUT the int variable auxAge? */

int main()  // no command-line params being passed
{
    int auxAge = 12345;
    int* age = &auxAge;
    // *age is an int, and age is an int* (i.e. age is …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

Visual Studio Code 抱怨结构属性语法

在下面的代码片段中(C,针对ARM嵌入式芯片)

typedef struct __attribute__((__packed__)) MyStruct_S
{
    int MyFirstField;
    int MySecondField;
} MyStruct_Type;
Run Code Online (Sandbox Code Playgroud)

VS Code 对属性后面的 MyStruct_S 标识符进行抱怨。投诉称“预期为 ';'C/C++(65)”。

然而,即使设置了 -Wall 和 -Wextra 编译器标志,此代码也可以正常编译和运行。

VS Code 做错了什么?我们可以修复 IntelliSence 以查看这是正确的语法吗?

我对此工作区的扩展如下:

  • 臂组件
  • C/C++
  • Doxygen 文档生成器
  • GNU 链接器映射文件
  • 生成文件工具
  • 世界SL

干杯!

c arm visual-studio-code

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

标签 统计

c ×2

arm ×1

c# ×1

integer-overflow ×1

pointers ×1

visual-studio-code ×1