小编tle*_*nes的帖子

没有64位临时的定点乘法

嗨我正在为嵌入式系统实现一些定点数学的东西,我正在尝试将两个16.16定点数相乘而不创建一个64位临时数.到目前为止,我提出的代码生成的指令最少.

int multiply(int x, int y){
    int result;
    long long temp = x;
    temp *= y;
    temp >>= 16;
    result = temp;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题在于它使用了一个临时的64位整数,这似乎会产生错误的汇编代码.我正在尝试制作一个使用两个32位整数而不是64位整数的系统.有人知道怎么做吗?

c optimization fixed-point

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

#line与全局静态范围的关系是什么?

给定一个C文件(foo.c)如下:

#line 1 "a.c"
static int bar = 1;
#line 2 "b.c"
static int bar = 2;
#line 2 "a.c"
int foo(){
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

bar的两个声明是在相同的范围内还是单独的范围(即foo()会返回1)?

注意:我对基于标准的正确行为感兴趣,而不仅仅是"我的编译器做了什么"(因此语言 - 律师标记)

c language-lawyer c-preprocessor

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

宏观参数

我有一个系统,其中有许多参数集"macroized"(形式为"#define name value,value,value"的宏).我想将这些宏传递给宏,但是当我这样做时,我得到一个错误.

例:

void fn(int a, int b, int c){ return; }

#define MACRO_1(a, b, c) fn(a, b, c)
#define MACRO(...) MACRO_1(__VA_ARGS__)
#define PARAM1 1
#define PARAM2 2, 2
#define PARAM3 3, 3, 3

int main(int argc, char * argv[]){
   MACRO(0,0,0);
   MACRO(PARAM1,1, 1);
   MACRO(PARAM2,2);
   MACRO(PARAM3);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Visual CI中得到:

1>c:\main.c(10): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(10): error C2059: syntax error : ','
1>c:\main.c(11): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(11): error …
Run Code Online (Sandbox Code Playgroud)

c macros visual-c++ c-preprocessor variadic-macros

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

C#类型需要特定类的子类以及接口

我正在开发一个实用程序,它将具有"Filters"的接口,该接口具有该接口的许多实现.接口的一部分将返回Control类型的对象,该对象将在UI中用于操作过滤器.

我希望能够要求返回的控件还实现另一个接口,以便我可以执行诸如请求控件写回创建它们的对象之类的操作.

现在我的代码看起来像:

public interface IFilter
{
    Control Control();
}
Run Code Online (Sandbox Code Playgroud)

我想要像:

public interface IFilterControl
{
    ...
}

public class FilterControl : Control, IFilterControl{}

public interface IFilter
{
    ...
    FilterControl Control();
}
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为FilterControl实际上并没有实现IFilterControl.

如果上述内容不够明确,请尝试想象虚构关键字"implmenting"如何在下面工作

public interface IFilterControl
{
    IFilter Filter{get;}
}

public interface IFilter
{
    Control implmenting IFilterControl Control();
}

public interface FilterImpl : IFilter
{
    Control implmenting IFilterControl Control(){
        return new FilterControlImpl(this);
    }
}

public partial class FilterImplControl : UserControl, IFilterControl
{
    FilterImpl filter;
    public FilterImplControl(FilterImpl filter)
    {
        this.filter = …
Run Code Online (Sandbox Code Playgroud)

c# interface subclass

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