Tag: gcc

为什么编译器不喜欢隐式地转换为uint?

我在C ++和C#中遇到了关于uint使用的几个类似的怪癖,现在我想知道推理(对于每个例子可能完全不同)。 对于这两个示例,请注意我正在编译时将警告级别设置为最大值。 (1)gcc抱怨在下面将int与uint进行比较,而vc ++没有: uint foo = ; if( foo == ~0 ) //right here … 比较0就好了,没有在gcc和vc ++上进行任何转换。 (2)在C#3.5中,我遇到了一个类似的问题。 以下工作正常: uint foo = 1; uint bar = 2; 但这会给出一个uint / int警告: bool condition = ; uint foo = condition ? 1 : 2; //right here 是什么给出了,为什么编译器对立即值的签名如此敏感? 我完全理解从变量赋值时的问题,但这对我来说对于直接值是没有意义的; 在解析中是否存在一些隐藏的难以阻止此行为被允许? 或者是什么? 编辑:是的,我知道我可以用’你’来填充我的数字,但是回避了我的问题,这是关于隐含地向左侧施放,而不是明确地施放右侧。

从C#/ NET引用针对Cygwin的GCC内置的GNU C(POSIX)DLL

这就是我想要的:我为POSIX编写了一个巨大的遗留C / C ++代码库,包括一些非常类似POSIX的东西,比如pthreads。 这可以在Cygwin / GCC上编译,并在Windows下使用Cygwin DLL作为可执行文件运行。 我想要做的是将代码库本身构建到Windows DLL中,然后我可以从C#中引用它并在其周围编写一个包装器以编程方式访问它的某些部分。 我在http://www.cygwin.com/cygwin-ug-net/dll.html上使用非常简单的“hello world”示例尝试了这种方法,但它似乎不起作用。 #include extern “C” __declspec(dllexport) int hello(); int hello() { printf (“Hello World!\n”); return 42; } 我相信我应该能够使用以下内容引用在C#中使用上述代码构建的DLL: [DllImport(“kernel32.dll”)] public static extern IntPtr LoadLibrary(string dllToLoad); [DllImport(“kernel32.dll”)] public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); [DllImport(“kernel32.dll”)] public static extern bool FreeLibrary(IntPtr hModule); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int […]