例如:
#define MY_TEST_FUNCTION
#ifdef MY_TEST_FUNCTION
void __MACRO_NAME##_TEST (void *)
{
}
#endif
这应该产生:
#ifdef MY_TEST_FUNCTION
void MY_TEST_FUNCTION_TEST (void *)
{
}
#endif
这就像 func ,我们在函数中获取函数名称。这可能吗?
答案 0 :(得分:2)
语言标准中没有定义这样的占位符。
你知道你刚检查过的宏,所以我不知道这样的占位符即使存在也会如此有用。
还要考虑......
#if defined( FOO ) || defined( BAR )
......“背景”应该被命名为什么?
答案 1 :(得分:1)
您假设太多的宏包含系统。 (无变量)宏只是用一个字符串替换一个名称。没有“当前宏上下文”,只是宏名称及其替换字符的映射。标题宏保护没有比EXIT_FAILURE
之类的任何宏更加特殊(stdlib.h
)。
#ifdef
和#ifndef
只测试是否使用给定名称定义宏,任何宏。
因此,如果您想拥有“标题宏上下文”,则必须在标题的开头手动设置它。
或许你的问题可以通过参数宏来解决。
#define function_variation( suffix ) int function_##suffix() {\
... \
}
答案 2 :(得分:0)
一种功能的单一宏就足够了
public class ProductsTable
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public ICollection<RxTable> RxTable { get; set; }
}
public partial class DrugsTable
{
public int DrugID { get; set; }
public string Strength { get; set; }
public string GCNSeqNo { get; set; }
public virtual ICollection<RxTable> RxTable { get; set; }
}
public class Person
{
public int PersonID { get; set; }
public virtual ICollection<RxTable> RxTable { get; set; }
}
public class RxTable
{
[Key, Column(Order = 0)]
public int ProductID { get; set; }
[Key, Column(Order = 1)]
public int DrugID { get; set; }
[Key, Column(Order = 2)]
public int PersonID { get; set; }
public virtual ProductsTable ProductsTable { get; set; }
public virtual DrugsTable DrugsTable { get; set; }
public virtual Person Person { get; set; }
}