这个 'emoji code' 是做什么的?
What does this 'emoji code' do?
我认为这是 C 代码,但我不完全确定。我在几个人的在线签名中找到了它,并且在SO聊天中找到了一次。我尝试编译它,但收到一个非常难以阅读的错误,该错误与出现的异常字符有关。
它有什么作用吗?我脑子里不知道该怎么办。
enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};
void ┻━┻︵╰(ಠ_ಠ ⚠) {exit((int)⚠);}
它不是有效的 C,但它可能会被宽容的 C++ 编译器接受。如果是这样,它不会“做”任何事情;它只声明了一个数据类型并定义了一个函数。
在 C++ 中,class
、union
、struct
和 enum
声明类型名。在 C 中,您需要使用 typedef
来实现大致相同的效果(大致相同,因为您不能在 C 中的作用域中声明类型名)。所以行:
enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};
声明了一个名为 ಠ_ಠ
的类型,它是一个 enum
,三个成员分别对应常量 1
、2
和 3
。 (注一)
因为 ಠ_ಠ
是一个类型名,所以可以这样使用。特别是,您可以声明函数 ┻━┻︵╰
(注 2):
void ┻━┻︵╰(ಠ_ಠ ⚠) {exit((int)⚠);}
以 ಠ_ಠ
作为名为 ⚠
的参数(注 3),将其转换为 int
,然后调用标准 C 库函数 exit
该值。
备注
枚举类型名很好,但所有成员名称都包含不在当前 C++ 标准中的有效标识符字符列表中的字符。一个宽容的 C++ 编译器可能允许它们作为扩展。 (但是,clang 和 gcc 都没有。)特别是度数符号 U+00B0 °
不是有效的标识符字符,U+2570 ╰
也不是,光弧向上和向右方框绘图字符。事实上,none个方框绘图字符是有效的标识符字符,包括白色方块U+25A1□
.
这些字符中的大多数 不是 有效的标识符字符。该名称中有六个字符:三个粗框绘制字符、一个垂直左括号、一个零宽度 space 和一个浅框绘制字符。奇怪的是,零宽度 space 是一个有效的标识符字符,即使它或多或少是不可见的。旋转的括号也是有效的,但是上面提到的四个画框字符就不行了。
“警告标志”⚠
也不在有效标识符字符列表中。
让我们对此进行去混淆处理。
enum eyes {a=1, b, c};
void f(eyes e) {exit((int)e);}
所以基本上它定义了一个函数,该函数使用枚举类型的退出代码中止程序执行。
虽然它在 C 中不起作用。
我认为这是 C 代码,但我不完全确定。我在几个人的在线签名中找到了它,并且在SO聊天中找到了一次。我尝试编译它,但收到一个非常难以阅读的错误,该错误与出现的异常字符有关。
它有什么作用吗?我脑子里不知道该怎么办。
enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};
void ┻━┻︵╰(ಠ_ಠ ⚠) {exit((int)⚠);}
它不是有效的 C,但它可能会被宽容的 C++ 编译器接受。如果是这样,它不会“做”任何事情;它只声明了一个数据类型并定义了一个函数。
在 C++ 中,class
、union
、struct
和 enum
声明类型名。在 C 中,您需要使用 typedef
来实现大致相同的效果(大致相同,因为您不能在 C 中的作用域中声明类型名)。所以行:
enum ಠ_ಠ {°□°╰=1, °Д°╰, ಠ益ಠ╰};
声明了一个名为 ಠ_ಠ
的类型,它是一个 enum
,三个成员分别对应常量 1
、2
和 3
。 (注一)
因为 ಠ_ಠ
是一个类型名,所以可以这样使用。特别是,您可以声明函数 ┻━┻︵╰
(注 2):
void ┻━┻︵╰(ಠ_ಠ ⚠) {exit((int)⚠);}
以 ಠ_ಠ
作为名为 ⚠
的参数(注 3),将其转换为 int
,然后调用标准 C 库函数 exit
该值。
备注
枚举类型名很好,但所有成员名称都包含不在当前 C++ 标准中的有效标识符字符列表中的字符。一个宽容的 C++ 编译器可能允许它们作为扩展。 (但是,clang 和 gcc 都没有。)特别是度数符号 U+00B0
°
不是有效的标识符字符,U+2570╰
也不是,光弧向上和向右方框绘图字符。事实上,none个方框绘图字符是有效的标识符字符,包括白色方块U+25A1□
.这些字符中的大多数 不是 有效的标识符字符。该名称中有六个字符:三个粗框绘制字符、一个垂直左括号、一个零宽度 space 和一个浅框绘制字符。奇怪的是,零宽度 space 是一个有效的标识符字符,即使它或多或少是不可见的。旋转的括号也是有效的,但是上面提到的四个画框字符就不行了。
“警告标志”
⚠
也不在有效标识符字符列表中。
让我们对此进行去混淆处理。
enum eyes {a=1, b, c};
void f(eyes e) {exit((int)e);}
所以基本上它定义了一个函数,该函数使用枚举类型的退出代码中止程序执行。
虽然它在 C 中不起作用。