gcc 为什么连这种代码都能编译通过?

2022-06-18 11:14:39 +08:00
 kgdb00
#include <stdio.h>

int main(int argc, char *argv[])
{
	char *s = argv[argc-1];
	printf("%s\n", s);

	char *s2 = argc[argv-1];
	printf("%s\n", s2);

	return 0;
}

打印最后一个参数,上面的写法是正确的,问题是下面的写法也能编译通过,而且打印输出和上面的写法一样,不明白为什么编译器允许 argc[argv-1] 这种写法。

7954 次点击
所在节点    Linux
42 条回复
FrankHB
2022-06-30 08:06:12 +08:00
@LANB0 所以不是你说的函数是指针么。如果是语法糖,那么只要没语法错误就能够直接替换。实际呢?
所谓语法糖就是能只需要遵从语法规则,在早期替换而不引起含义改变的严格意义上的“另一种写法”。任何引起语义规则介入影响正确性的,任何多引入未指定行为的,诸如此类,都不配叫“语法”糖。望周知。
kkzxak47
2022-07-05 20:36:31 +08:00
已经不是语法和语法糖的范畴了,是 syntactic poison 哈哈哈

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

https://www.v2ex.com/t/860466

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

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

© 2021 V2EX