草庐IT

C++条件编译

全部标签

c# - 为什么编译器允许将 Convert.ToString() 分配给整数?

我不小心在我的代码中偶然发现了类似于下面的东西,它编译得很好,但在运行时显然是炸弹:dynamicfiftySixDynamic=56;intfiftySixInt=System.Convert.ToString(fiftySixDynamic);Convert.ToString()的每次重载都会返回一个字符串,所以这肯定不应该编译?这是怎么回事? 最佳答案 您正在使用dynamic作为Convert.ToString的输入。因为输入是动态,方法绑定(bind)和类型检查被推迟到运行时,所以编译器看不到唯一可能的返回类型是strin

c# - 如何使调试与发布之间的编译不同?

我是C#新手,在编译C#项目时遇到问题。它是关于调试和Release模式下的调试日志。我希望日志函数在Debug模式下被调用,而在Release模式下不被调用,考虑到性能。我知道在C/C++中,这很容易做到://thisisC/C++sample,notC##ifdefDEBUG#defineDebugLog(CString,__VA_ARGS__)LogFunction(CString,__VA_ARGS__)#else#defineDebugLog#endif上述C/C++代码中,DebugLog()是在Debug模式下编译调用的,而在Release模式下不编译调用,因此可以保证性

c# - 依赖注入(inject) Unity - 条件解析

条件解析是我目前最不理解的事情。假设我们有一个接口(interface)IAuthenticate:publicinterfaceIAuthenticate{boolLogin(stringuser,stringpass);}现在我有两种类型的身份验证。推特验证publicclassTwitterAuth:IAuthenticate{boolLogin(stringuser,stringpass){//connecttotwitterapi}}Facebook身份验证publicclassFacebookAuth:IAuthenticate{boolLogin(stringuser,s

c# - 为什么 null == false 在 c# 中不会导致编译错误?

这个问题在这里已经有了答案:C#okaywithcomparingvaluetypestonull(11个答案)关闭9年前。这不是为了解决任何特定问题。只是一个编译器问题。为什么下面的代码不会导致编译错误?它将引用类型与原始类型进行比较。null和false都必须被解释为编译器进行比较的东西。或者解析器只是简单地扫描这种模式并将其替换为false?if(null==false){}

C# 初始化条件赋值

在C#初始化程序中,如果条件为假,我不想设置属性。像这样:ServerConnectionserverConnection=newServerConnection(){ServerInstance=server,LoginSecure=windowsAuthentication,if(!windowsAuthentication){Login=user,Password=password}};可以吗?怎么办? 最佳答案 这在初始化器中是不可能的;你需要做一个单独的if语句。或者,你可以这样写ServerConnectionserve

c# - 在条件运算中使用 true 和 false 作为表达式

我正在维护一些代码并且经常发现以下模式:varisMale=(row["Gender"].ToString()=="M")?true:false;而不是这个:varisMale=(row["Gender"].ToString()=="M");有什么理由为什么有人会这样做吗?有人认为前者更具可读性或更清晰吗?是否有某种旧的C语言“陷阱”是它的延期? 最佳答案 合理的理由?没有。它通常是由并不真正理解条件本身也是一个表达式的人产生的,它会产生一个bool结果。特别是,人们接受的语言不是这种情况,例如BASIC的许多变体。

c# - IF Statement 多个条件,同一条语句

大家好,希望减少我的c#if语句中的代码,因为有几个重复因素,并且想知道是否可以使用trimmer解决方案。我目前有2个if语句需要执行相同的语句,但是唯一的变量是在未选中复选框时if语句的额外条件。我只是想知道是否有办法让它成为一条语句或使条件字符串成为变量,这里是代码的压缩版本:if(checkbox.checked){if(columnname!=a&&columnname!=b&&columnname!=c){"statement1"}}else{if(columnname!=a&&columnname!=b&&columnname!=c&&columnname!=A2){"s

c# - C# 编译器和 JIT 都做了哪些优化?

我将继续为我的编译器类开发C#编译器。目前,我几乎完成了教科书中有关编译器优化的章节。在大多数情况下,我的教科书在编写时并没有考虑到即时编译,我很好奇C#编译器执行的静态预jit优化与它在编写过程中执行的操作JIT流程?当我与人们谈论针对CLR进行编译时,我通常会听到诸如“大部分优化由JIT完成”之类的话。诸如循环展开、常量折叠/传播、指令交织之类的事情是由C#编译器在Jit前完成的还是由抖动处理的?如果它们不是由抖动处理的,那么抖动会进行什么样的优化,这是即时编译器所独有的? 最佳答案 我可以想象有许多JIT独有的优化;具体来说,

c# - 我可以强制编译器优化特定方法吗?

是否有一个属性可以用来告诉编译器必须始终优化方法,即使未设置全局/o+编译器开关?我问的原因是因为我在玩弄基于现有方法的IL代码动态创建方法的想法;当代码经过优化时,我想做的操作相当容易,但在未优化的代码中变得非常困难,因为编译器生成了额外的指令。编辑:关于困扰我的非优化的更多细节......让我们考虑以下阶乘函数的实现:staticlongFactorialRec(intn,longacc){if(n==0)returnacc;returnFactorialRec(n-1,acc*n);}(注意:我知道有更好的方法来计算阶乘,这只是一个例子)启用优化后生成的IL非常简单:IL_000

c# - 支持编译依赖的多个版本 (vNext)

我为目前支持MVC2-MVC5的开源库做出贡献,我也希望支持MVC6(及更高版本)。为了支持每个版本的MVC,我们利用了ConditionMSBuild的功能,在进行构建时包含正确版本的MVC及其依赖项(取决于DefineConstants的值)。通过使用相同的项目文件和源代码为每个MVC版本创建一个单独的DLL,这使得为所有受支持的MVC版本使用单个项目文件成为可能。True..\packages\Microsoft.AspNet.Mvc.3.0.20105.1\lib\net40\System.Web.Mvc.dllTrue..\packages\Microsoft.AspNet.