这个 'emoji code' 是做什么的?

What does this 'emoji code' do?

我认为这是 C 代码,但我不完全确定。我在几个人的在线签名中找到了它,并且在SO聊天中找到了一次。我尝试编译它,但收到一个非常难以阅读的错误,该错误与出现的异常字符有关。

它有什么作用吗?我脑子里不知道该怎么办。

enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};
void ┻━┻︵​╰(ಠ_ಠ ⚠) {exit((int)⚠);}

它不是有效的 C,但它可能会被宽容的 C++ 编译器接受。如果是这样,它不会“做”任何事情;它只声明了一个数据类型并定义了一个函数。

在 C++ 中,classunionstructenum 声明类型名。在 C 中,您需要使用 typedef 来实现大致相同的效果(大致相同,因为您不能在 C 中的作用域中声明类型名)。所以行:

enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};

声明了一个名为 ಠ_ಠ 的类型,它是一个 enum,三个成员分别对应常量 123。 (注一)

因为 ಠ_ಠ 是一个类型名,所以可以这样使用。特别是,您可以声明函数 ┻━┻︵​╰(注 2):

void ┻━┻︵​╰(ಠ_ಠ ⚠) {exit((int)⚠);}

ಠ_ಠ 作为名为 的参数(注 3),将其转换为 int,然后调用标准 C 库函数 exit该值。


备注

  1. 枚举类型名很好,但所有成员名称都包含不在当前 C++ 标准中的有效标识符字符列表中的字符。一个宽容的 C++ 编译器可能允许它们作为扩展。 (但是,clang 和 gcc 都没有。)特别是度数符号 U+00B0 ° 不是有效的标识符字符,U+2570 也不是,光弧向上和向右方框绘图字符。事实上,none个方框绘图字符是有效的标识符字符,包括白色方块U+25A1.

  2. 这些字符中的大多数 不是 有效的标识符字符。该名称中有六个字符:三个粗框绘制字符、一个垂直左括号、一个零宽度 space 和一个浅框绘制字符。奇怪的是,零宽度 space 是一个有效的标识符字符,即使它或多或少是不可见的。旋转的括号也是有效的,但是上面提到的四个画框字符就不行了。

  3. “警告标志” 也不在有效标识符字符列表中。

让我们对此进行去混淆处理。

enum eyes {a=1, b, c};
void f(eyes e) {exit((int)e);}

所以基本上它定义了一个函数,该函数使用枚举类型的退出代码中止程序执行。

虽然它在 C 中不起作用。