嗨我正在为嵌入式系统实现一些定点数学的东西,我正在尝试将两个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文件(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)?
注意:我对基于标准的正确行为感兴趣,而不仅仅是"我的编译器做了什么"(因此语言 - 律师标记)
我有一个系统,其中有许多参数集"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) 我正在开发一个实用程序,它将具有"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)