分配操作员的重新定义

时间:2014-04-16 03:59:01

标签: c operators c-preprocessor operator-keyword

据我所知,有几种语言使用:=作为赋值运算符。实现这一点可能会避免与==运算符混淆。这对我来说似乎是一个非常有效的观点,所以我在考虑如何用 C 这样的语言来实现它。这就是我的想法。

#define := =
// ... later on

int x := 4;

虽然这可行(如果预处理器支持该语法),它仍然允许我使用=运算符。所以我的问题是,有没有办法让#34;标记"一个符号或运算符/有没有办法阻止使用某些定义的运算符或符号?同样,这是我的想法,但我不知道这个的语法/语义合法性。

#undef =

3 个答案:

答案 0 :(得分:1)

标准C不允许' ='赋值运算符未定义或已更改。但是,可以使用几个C编译器的源代码;并且欢迎您自己修改C编译器的构建。包括更改' ='到':='。祝你好运!

答案 1 :(得分:1)

好问题,但不要这样做。您的方法导致可读性差。

答案 2 :(得分:1)

#define := =

宏名称只能是标识符。如果任何C编译器接受该定义,我会感到非常惊讶。原则上,编译器可以接受它作为语言扩展,但是例如gcc没有。任何符合要求的C编译器必须至少发出诊断信息。

你说它有效;我坦率地持怀疑态度。你使用什么编译器?

#undef =

同样的问题。

我可以看到(甚至同意)您的观点,即使用:=而不是=作为赋值运算符会更好。但是使用预处理器来改变这样的语言,即使在它工作的情况下,也不是一个好主意。

C程序员知道=意味着分配。阅读代码的任何人都可能会猜到:= 意味着要进行分配,但这只会使您的代码难以阅读。