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++里咋算的吧?如果真不知道,评论我哦,我详解啊。

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

posted @ 2015-03-23 17:44  shenyuelong  阅读(174)  评论(2编辑  收藏  举报