运算符在C中重载

我试图重载一些运算符:

/* Typedef is required for operators */ typedef int Colour; /* Operators */ Colour operator+(Colour colour1, Colour colour2); Colour operator-(Colour colour1, Colour colour2); Colour operator*(Colour colour1, Colour colour2); Colour operator/(Colour colour1, Colour colour2); 

我为每次尝试重载都收到此错误:

 expected '=', ',', ';', 'asm' or '__attribute__' before '+' token 

我找不到有关运算符重载的任何好文档。 谷歌搜索结果导致使用类的C ++教程。 在C中没有类。 谁能帮我? 谢谢。

C不支持运算符重载(超出它内置的语言)。

C中没有运算符重载。

你不能在C中重载这些运算符。

您需要一台时间机器带您回到1985年,以便您可以使用程序CFront 。 似乎’C’用于支持运算符重载; 到足够复杂,它仍然可以。 请参阅Stanley B. Lippman 的C ++对象模型内部 。 OMG,C ++是C! 这样的事情仍然存在。

这个答案证实了其他人。 ‘C’本身并不直接支持重载。 但重要的是程序员可以编写能够理解代码的代码。 您需要一个转换源来实现此function的工具。 在这种情况下,已经存在这样的工具。

由Edward D. Willink撰写的论文“ Meta-Compilation for C ++”,2001年有一些有趣的设计function实例,其中扩展语言很有用。 * nix shell脚本和make规则的组合通常允许这种转换。 其他例子是Qt MOC,工具Lex和Yacc等。因此,虽然’C’本身不能直接适应这种情况,但如果您构建主机工具,它就会这样做。

在这个特定的例子中,重载可能没有意义。 但是,对于需要任意精度数学的程序来说,这可能很有意义。

C根本不支持运算符重载。

您只能将操作实现为函数:

 Colour colour_add(Colour c1, Colour c2); Colour colour_substract(Colour c1, Colour c2); ... 

您也可以切换到C ++,但仅仅为了重载可能有点过分。

C中没有运算符重载。相反,您必须使用函数来“伪过载”运算符:

 Colour add_colours(Colour c1, Colour c2) { return c1 + c2; // or whatever you need to do } 

如果你想要类似的简洁,宏的使用是最好的选择:

 void Type_getSomething(int id); //or some other complex series of instructions #define g(id) Type_getSomething(id) 

…很遗憾,宏不可能使用方括号!