小编mun*_*ent的帖子

我应该何时使用"int"与更多特定于标志或特定尺寸的类型?

我有一个用于在C中实现的编程语言的VM.它支持在32位和64位架构以及C和C++下编译.

我正在尝试使用尽可能多的警告来干净地编译它.当我打开时CLANG_WARN_IMPLICIT_SIGN_CONVERSION,我会得到一连串的新警告.

我希望有一个很好的策略,可以使用何时使用int显式无符号类型和/或显式大小的类型.到目前为止,我无法确定该策略应该是什么.

将它们混合使用 - 主要int用于局部变量和参数之类的东西,并在结构中使用较窄的类型- 确实会导致许多隐式转换问题.

我喜欢为struct字段使用更具体的大小类型,因为我喜欢显式控制堆中对象的内存使用量的想法.此外,对于散列表,我在散列时依赖于无符号溢出,因此如果散列表的大小存储为,则很好uint32_t.

但是,如果我尝试在任何地方使用更具体的类型,我发现自己到处都是曲折的迷宫.

其他C项目有什么作用?

c unsigned signed

56
推荐指数
3
解决办法
4553
查看次数

Java的使用站点差异与C#的声明站点差异相比如何?

我的理解是在C#中为泛型指定方差发生在类型声明级别:当您创建泛型类型时,您指定类型参数的方差.另一方面,在Java中,指定了使用泛型的方差:当您创建某个泛型类型的变量时,您可以指定其类型参数的变化方式.

每种选择的优缺点是什么?

c# java generics variance

34
推荐指数
2
解决办法
3677
查看次数

C#垃圾收集器如何找到唯一引用为内部指针的对象?

在C#中,refoutPARAMS是,据我所知,是,只透过相关值的原始地址通过.该地址可以是指向数组中的元素或对象内的字段的内部指针.

如果发生垃圾收集,则对某个对象的唯一引用可能是通过其中一个内部指针,如:

using System;

public class Foo
{
    public int field;

    public static void Increment(ref int x) {
        System.GC.Collect();
        x = x + 1;
        Console.WriteLine(x);
    }

    public static void Main()
    {
        Increment(ref new Foo().field);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,GC需要找到对象的开头并将整个对象视为可达.它是如何做到的?是否必须扫描整个堆以查找包含该指针的对象?这似乎很慢.

.net c# clr garbage-collection pass-by-reference

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

它被认为是一个糟糕的实践使用返回结束功能?

我是一名PHP和ActionScript开发人员,在我的一些函数中,我用return它来结束它.例:

private function lolsome(a:String):void
{
   if(a == "abs"){return void;}

   // function's code      
}
Run Code Online (Sandbox Code Playgroud)

我可以将函数的代码放入其中else,但我更喜欢这种方式,因为在我看来,这更加清晰.我只是想知道这是否被认为是一种不好的做法或类似的事情.

谢谢!

programming-languages

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

如何判断计算的 goto 是否受支持?

我正在编写一个字节码解释器,它可以使用计算的 goto 或switch主指令调度循环的正常值。关键位包含在几个宏中,这些宏可以定义为使用或不使用计算的 goto。

我想根据编译器是否支持计算 goto 来决定默认使用哪种模式。有谁知道如何确定?据我所知,它们适用于 GCC 和 Clang,但我不想只硬编码几个随机编译器名称。

c compiler-construction interpreter

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