gpt4 book ai didi

preprocessor - D 编程语言中 "#ifdef"、 "#ifndef"、 "#else"、 "#elif"、 "#define"、 "#undef"的类似物是什么?

转载 作者:行者123 更新时间:2023-12-04 09:35:22 24 4
gpt4 key购买 nike

在 C/C++ 中,我们有预处理器指令(参见问题标题)。它们在 D 语言中的类比是什么?
以及如何在编译时检测操作系统类型(Windows、Linux、Mac OS X、FreeBSD...)和处理器类型(例如:32 位或 64 位)?

最佳答案

模拟 ifndef。
这是对符号存在的测试:
如果 FT_THROW未定义,则定义默认函数 FT_THROW。这是带有 ifndef 的模拟公共(public)代码。

import std.stdio;

// my implementation of FT_THROW
void FT_THROW( int x ) { writeln( "calling redefined FT_THROW(): ", x*x ); }

// ifndef FT_THROW
static if ( !is( typeof( FT_THROW ) ) )
{
pragma( msg, "FT_THROW not exists. using default implementation." );

// default implementation of FT_THROW
void FT_THROW( int x ) { writeln( "call FT_THROW(): ", x ); }
}


void main()
{
// ifdef FT_THROW
static if ( is( typeof( FT_THROW ) ) ) // checking for FT_THROW extsts
{
pragma( msg, "FT_THROW found" );
}

FT_THROW( 7 );
}
在线: https://run.dlang.io/is/N3ENqb
真实例子:
#ifndef FT_MEM_ZERO
#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
#endif
static if ( !is( typeof( FT_MEM_ZERO ) ) ) 
{
auto FT_MEM_ZERO( T1, T2 )( T1 dest, T2 count ) { FT_MEM_SET( dest, 0, count ); }
}
示例 2:
#ifndef TRUE
#define TRUE 1
#endif
static if ( !is( typeof( TRUE ) ) ) 
enum TRUE = 1;

关于preprocessor - D 编程语言中 "#ifdef"、 "#ifndef"、 "#else"、 "#elif"、 "#define"、 "#undef"的类似物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com