C#是否具有#incf常量的#include等价物?

时间:2017-09-13 13:15:28

标签: c# c

在人们将这个问题分开之前,我会解释我想要做的事情。

我目前有一个可以访问共享内存的C程序。 C程序通过#defined偏移导航此共享内存。例如:

#define VAR_1 0x2000

现在我有一个C#程序显示来自此共享内存的数据。我正在尝试确定如何使用我的C程序使用的#defines,让我的C#程序也引用它们。

我试图避免需要维护包含这些定义的两个文件。

因此,C#程序有没有办法使用.h文件中的#defines?

谢谢,

1 个答案:

答案 0 :(得分:1)

The short answer is no

  

#define指令不能用于声明常量值   通常用C和C ++完成。 C#中的常量最好定义为   类或结构的静态成员。如果你有几个这样的   常数,考虑创建一个单独的"常数"上课   它们。

你可以这样做:

constants.cs:

#if __STDC__
#define public
#else
namespace foo
{
    class Constants {
#endif

public const int VAR_1 = 0x2000;

#if __STDC__
#undef public
#else
    }
}
#endif

main.c中:

#include <stdio.h>
#include "constants.cs"

int main(void)
{
    printf("%d\n", VAR_1);
    return 0;
}

的Program.cs:

using System;
namespace foo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Constants.VAR_1);
        }
    }
}

这导致:

$ gcc -Wall -Wpedantic main.c && ./a.out 
8192
$ dotnet run
8192

这是在C中使用const int而不是#define,但这可能是您愿意做出的权衡。