我有以下我想要转换的宏。
#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((DWORD)ntheader + \
FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
我对C ++很绿。有人可以帮我一把吗?
提前致谢!
答案 0 :(得分:2)
只需将它们创建为函数即可。 c ++中宏的唯一真正的优势是你强制内联。 C#中的编译器足够智能,可以为您做出内联决策。
很难从你给我的例子中给你一个例子,主要是因为他们在c#中没有“理解”,但我会试着给你一个想法:
#define AddNumbers(x,y) x+y
可以翻译成:
public Int32 AddNumbers( Int x, Int y )
{
return x+y;
}
编辑:
下面的人有一点我已经将转换简化为TOO了。我的观点更多的是展示结构,而不是实际的转换过程。