C化名为C#助理

C化名为C#助理,c#,c,alias,C#,C,Alias,从事一个业余项目,将旧的C应用程序转换为C# 在C中,他们将定义如下常量/别名: #define args( list ) list #define DECLARE_DO_FUN( fun ) DO_FUN fun #define DECLARE_SPEC_FUN( fun ) SPEC_FUN fun #define DECLARE_SPELL_FUN( fun ) SPELL_FUN fun void init_descripto

从事一个业余项目,将旧的C应用程序转换为C#

在C中,他们将定义如下常量/别名:

#define args( list )            list
#define DECLARE_DO_FUN( fun )       DO_FUN    fun
#define DECLARE_SPEC_FUN( fun )     SPEC_FUN  fun
#define DECLARE_SPELL_FUN( fun )    SPELL_FUN fun
void    init_descriptor     args( ( int control ) );
bool    read_from_descriptor    args( ( DESCRIPTOR_DATA *d ) );
bool    write_to_descriptor args( ( int desc, char *txt, int length ) );
C#中的等价物是什么


由于我不再热衷于Ansi-C(上一次是90年代中期),我需要其他人帮助进行一些签名转换。

在C#中没有宏这样的东西,这是有充分理由的。也没有相应的功能。在宏中思考意味着不在C#和/或OOP中思考。因此,与其这样做

#define args( list ) list
你会做类似的事情

public class MyHelpers
{
    public static T Args<T>(T list)
    {
        return list;
    }
}

使用Something=SomeNamespace.SomeType,否?什么等效于C#中的代码?示例中没有常量或别名,只有函数声明。旁注:从头开始编写C代码可能更容易(取决于项目的大小)。。。将潜在的程序性C代码转换为合理的面向对象C代码可能与重写一样复杂。仅供参考,我认为
#define args()
是一个不可操作的操作,它有助于将参数宏扩展到其他
#define
宏。你说得很对。我试图给出一个一般的例子,但是正如你的观点指出的:它不适合,在C++中确实不等同于C++预编译器宏。我在C库中找不到
列表
的任何信息。有什么帮助吗?在处理两个结构不同的框架之间的这种广泛转换时,我发现这两个框架之间有相似之处,只是OOP(托管)与非托管代码实现相同效果的方式通常更长。简单来说,宏类似于邮件合并。代码在编译之前被替换。在上面的例子中,列表只是一个占位符。在编译之前,所有标识符(左侧)都将替换为令牌字符串(右侧)。在您的示例中,“void init_descriptor args((int-control));”在编译之前会变成“void init_descriptor(int-control);”。在这些情况下,它是一个参数列表宏,它们能有效地转换为委托吗?
SomeType result = MyHelpers.Args(someObject);