[英]Overloaded operators in C via macros with type notification
C预处理程序不能用于重载运算符,因为它不知道表达式“ a + b”中a和b的类型,请参见此问题 。
但是,给它一个类型呢,像这样:
out = (a*b+b*n) x c : {a,b,c->vector3, n->float};
将其预处理为:
vector3 out = cross(add(dot(a,b), mult(b,n)),c);
这种解决方法在将代码库迁移到C ++或与C和C ++交互时很有用。 但是,:左边的表达式更易于阅读。
这样的解决方案可行吗?
使用C预处理程序是不可能的,我可以通过简单列出所有预处理程序指令来证明这一点。
#include
(复制并粘贴文件内容) #define
(宏) #if
, #else
, #elif
, #ifdef
, #ifndef
(条件编译) #line
(更改__LINE__
和__FILE__
值) #error
(强制执行编译错误) #pragma
(与编译器相关的功能) #
(空指令,不执行任何操作) 您感兴趣的一种功能,宏,仅适用于标识符:
#define MAX(a,b) replacement
#define VALUE replacement
+
, *
, :
, {
, }
不是标识符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.