zoukankan      html  css  js  c++  java
  • C#,见到你很开心

    上一篇说的问题很简单,这次又深入一些了啊。首先我想分享下学习enum的经历。。

    (1)

    大家看哈,some.c前面没加int,直接给显示字符了,第二个就不一样了,所以大家以后用这个enum的时候一定要注意要么在enum后面直接注明类型,要么就别忘了这个转换。另外一个诡异的现象就是enum不能写在Main方法下,不然就出一些奇怪的错。查了一下才知道原来方法中不允许定义类/枚举/结构,不单Main方法不行,其他的方法也不行。
    这些的定义必须放在namespaces或class等下面,涨知识了。

    (2)还有就是大家很熟的switch,case结构,这本来没什么问题的,我还是找到一个不痛不痒的现象,就是goto语句竟然同样对default起作用,比如

    这样不就可以把多种情况需要做同一处理的事件处理的很好吗?但是鉴于goto语句是个Semolina  seed,祸乱的根源我们还是少碰为好。

    (3)预处理真是程序员的福音啊,可以随意挑选自己的需要的代码运行,真正的一劳永逸啊。以下是简单的演示

    #undef DEBUG
    #define test
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
        class Program
        {

            static void Main(string[] args)
            {
                int test = 2;
                switch (test)
                {
                    case 1:
                        Console.WriteLine("i am 1");
                        break;
                    case 2:
                        goto default;
             
                    case 3:
                        Console.WriteLine("i am 3");
                        break;
                    default:
                        Console.WriteLine("i am failed");
                        break;
                }

    #if DEBUG
                Console.WriteLine("哈哈,我被执行了");
    #endif   

    #if test
                Console.WriteLine("哈哈,我被执行了啊");
    #endif

            
            }
        }
    }

    undef的运行不了,代码是灰色的,但是有一天你想让它跑起来,只要把头上的undef改成define就行了,像是在程序的里面安了几个开关,想开几个灯就开几个。

    (4)哦吼,前面的内容很简单啊,这会儿来点有难度的了,先来看看同一段代码在不同编译器的表现吧。

    在C#里的

    在c++里的

    在java里的

    可以看到C#的结果跟java是一样的,但是c++中的就不一样了。其实,在C#和java中一式是5+6+7,二式是6+7+8,而C++中是这么算的

    第一步计算:(++i)+(++i)
    优先括号,i=7, (++i)+(++i) == 7 + 7 == 14
    第二步计算:14 + (++i)
    j = 14 + 8 = 22

    哈哈,知道这个了,想必各位看客老爷肯定知道二式在C++里咋算的吧?如果真不知道,评论我哦,我详解啊。

    另外自己瞎想的时候脑洞一开,能不能把这类问题汇个总,弄个测试软件,到机器上一跑,通过结果不就能判断该机器是用什么编译器了吗,然后咱们就能弄出点好玩的东西……                  

  • 相关阅读:
    【arc072f】AtCoder Regular Contest 072 F
    maven settings解决下载不了依赖包问题
    git 命令提交本地代码到新创建的仓库
    JAVA 利用切面、注解 动态判断请求信息中字段是否需要为空
    JAVA 根据身份证号码解析出生日期、性别、年龄
    利用JAVA正则快速获取URL的文件名
    datalist
    Mybatis map接收list参数
    bootstrap-table 列宽动态拖拽改变宽度
    JAVA 枚举类遍历与switch使用
  • 原文地址:https://www.cnblogs.com/shenyuelong/p/4360535.html
Copyright © 2011-2022 走看看