D语言 - 条件编译

D语言 - 条件编译 首页 / D语言入门教程 / D语言 - 条件编译

条件语句涉及可在编译时判断的条件检查,运行时条件语句(如if,for,while)不是条件编译函数, D的以下函数用于条件编译-

  • debug
  • version
  • static if

调试语句

调试在程序开发过程中很有用。仅当启用-debug编译器开关时,才会将标签为debug的表达式和语句编译到程序中。

debug a_conditionally_compiled_expression;
   
debug { 
   //... 有条件编译的代码 ... 
} else { 
   //... 以其他方式编译的代码 ... 
}

else子句是可选的。仅在启用-debug编译器开关时,才编译单个表达式和上面的代码块。

这些行可以完全标签为debug而不是完全删除。

debug writefln("%s debug only statement", value); 

仅当启用-debug编译器开关时,此类行才包含在程序中。

无涯教程网

链接:https://www.learnfk.comhttps://www.learnfk.com/d-programming/d-programming-conditional-compilation.html

来源:LearnFk无涯教程网

dmd test.d -oftest -w -debug 

Debug语句

可以给调试语句指定名称(标签),以便有选择地包含在程序中。

debug(mytag) writefln("%s not found", value);

仅当启用-debug编译器开关时,此类行才包含在程序中。

无涯教程网

链接:https://www.learnfk.comhttps://www.learnfk.com/d-programming/d-programming-conditional-compilation.html

来源:LearnFk无涯教程网

dmd test.d -oftest -w -debug=mytag

调试块也可以具有标签。

debug(mytag) { 
   //
}

一次可以启用多个调试标签。

dmd test.d -oftest -w -debug=mytag1 -debug=mytag2

调试级别

有时,按数字级别关联调试语句会更有用。级别增加可以提供更多详细信息。

import std.stdio;  

void myFunction() { 
   debug(1) writeln("debug1"); 
   debug(2) writeln("debug2");
}

void main() { 
   myFunction(); 
} 

低于或等于指定级别的调试表达式和块将被编译。

$dmd test.d -oftest -w -debug=1 
$./test 
debug1 

Debug和Version示例

版本类似于调试,并且以相同的方式使用。 else子句是可选的。尽管版本在本质上与调试相同,但是使用单独的关键字有助于区分它们的不相关用法。与调试一样,可以启用多个版本。

import std.stdio;  

void myFunction() { 
   version(1) writeln("version1"); 
   version(2) writeln("version2");     
}
  
void main() { 
   myFunction(); 
}

低于或等于指定级别的调试表达式和块将被编译。

$dmd test.d -oftest -w -version=1 
$./test 
version1 

static if

静态if是if语句的编译时等效项。就像if语句一样,静态 if接受逻辑表达式并对其求值。与if语句不同,静态 if与执行流程无关;相反,它确定程序中是否应包含一段代码。

在语法和语义上,if表达式都与我们之前所见的is运算符无关。它在编译时判断。它产生一个整数值,0或1;否则为0。取决于括号中指定的表达式。尽管它采用的表达式不是逻辑表达式,但是is表达式本身用作编译时逻辑表达式。如果条件和模板约束,它在静态中特别有用。

import std.stdio;

enum Days { 
   sun, 
   mon, 
   tue, 
   wed, 
   thu, 
   fri, 
   sat 
}; 
 
void myFunction(T)(T mytemplate) {
   static if (is (T == class)) { 
      writeln("This is a class type"); 
   } else static if (is (T == enum)) { 
      writeln("This is an enum type"); 
   } 
}
  
void main() { 
   Days day; 
   myFunction(day); 
} 

当我们编译并运行时,我们将得到如下输出。

This is an enum type

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

ZooKeeper实战与源码剖析 -〔么敬国〕

研发效率破局之道 -〔葛俊〕

即时消息技术剖析与实战 -〔袁武林〕

DDD实战课 -〔欧创新〕

正则表达式入门课 -〔涂伟忠〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

恋爱必修课 -〔李一帆〕

计算机基础实战课 -〔彭东〕

零基础学Python(2023版) -〔尹会生〕

好记忆不如烂笔头。留下您的足迹吧 :)