噗!“类型弱置”

8 天前
 cnbatch

刷知乎时给我推送了一条回答(为什么新兴语言普遍都是类型后置的?
回答里面有个高赞评论

完整复制粘贴:

前置后置都没问题,只要别搞 C 那一坨狗屎。

前置: int[42] x (或 [42]int x

后置: var x: int[42] (或 var x: [42]int

狗屎: int x[42];

肯定有人问,C 这写法不是很清晰么,为什么说它是狗屎。因为只有它会搞出 int (*[42])(int) 这种晦涩的东西,处理这种东西对做编译器的人、对写程序的人都是灾难。

评论区的高赞( 2025 年 2 月 3 日):

这叫类型弱置(狗头)


其实再早几个月已经有人在另一个条回答的评论区表达过“弱置”,然后有人造词“类型弱置”
https://www.zhihu.com/question/667841945/answer/3632646566

继续复制粘贴:

你跟我说,这种写法

void ( *signal(int signum, void (*handler)(int)) ) (int);

前置?

评论区( 2024 年 9 月 30 日):

a: fn() 后置

fn() a 前置

fn (*a)() 弱置

评论区( 2024 年 10 月 1 日):

类型弱置

以及充满了讽刺语气的( 2025 年 3 月 31 日):

fn (*a)() 外置

void ( *signal(int signum, void (*handler)(int)) ) (int); 是混合痔


这些谐音梗真是讽刺度溢出屏幕

读音“类型弱智”,4 个字表达“类型置位的方式是弱智”

同样的还有:外置(外痔)、混合痔(混合置)


正经来讲,其实这是类型中置,但看得出许多人觉得不爽

目前各个搜索引擎查找“类型弱置”都搜不出实际内容,看来知乎的这条提问,里面的各个留言首创了“类型弱置”这个词

1745 次点击
所在节点    程序员
8 条回复
Mithril
8 天前
可能是我老了,已经懒得去取笑 C 语言的各种坑和烂梗了。

毕竟是一门 50 多岁的语言了,半个世纪前的很多东西现在看来没那么严谨,也毫无必要了。为了保证兼容性,也不会改。

但也不能证明在当时的环境下,这种选择是不对的,是值得被取笑的东西。

觉得不好不用它就是了。
shimanooo
8 天前
你以为 C:高级程序语言
实际上的 C:加强版汇编
xuanbg
7 天前
所以你懂高司令了吗?

高司令:你们总骂 Java 这也要管那也要管,其实我只不过预判了沙雕程序员的恶趣味而已……
marcong95
7 天前
void ( *signal(int signum, void (*handler)(int)) ) (int);

形如这种形式的说不上是「类型中置」吧,变量名中置倒是说得过去。所以反而讽刺用的「外置」或者「混合置」反而是合理的~~
wyntalgeer
7 天前
AI:有趣,爱看
cnbatch
7 天前
@marcong95 记得 V 站以前有人说过,这属于“中缀”表达,严格来讲确实不属于类型中置
叫做“混合置”反而够形象
marcong95
7 天前
@cnbatch 中缀也没错,只不过是变量名中缀而已。就像表达式的 5 + 3 是运算符中缀,5 3 +是运算符后缀,+ 5 3 是前缀啥的。
DOLLOR
7 天前
借助 typeof ,可以把 C 改得更像前置类型了🐶

#define Array(T, SIZE) typeof(typeof(T)[SIZE])
#define Pointer(T) typeof(typeof(T) *)
#define FP(RETURN, ARGS) typeof(typeof(RETURN)(*) ARGS)

效果

// int ai[10]
Array(int, 10) ai;
// int *pi
Pointer(int) pi;

// int (*pai)[10]
Pointer(Array(int, 10)) pai;
// int *api[10]
Array(Pointer(int), 10) api;

// void (*fp)(int)
FP(void, (int)) fp;
// int *(*fp2)(int *)
FP(Pointer(int), (Array(int, 10))) fp2;
// int (*afp[10])(int, int (*)(int))
Array(FP(int, (int, FP(int, (int)))), 10) afp;

是不是更清晰一点了🐶😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1141825

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX