由于与对象相关联的每个操作都实施为 C 中的全局函数,它必须与上下文(以指向它所操作对象的指针的形式)一起提供。在 C++ 中,该上下文是以暗含的 this 指针作为第一个自变量的形式提供的。但是,this 指针在 C 中是不可用的。因此,在 C 中的 IBM® Rational® Rhapsody® 中,操作的第一个自变量通常是指向与该操作相关联的对象的指针。该上下文指针习惯上称为 me。例如:
/*## operation close() */ void Valve_close(Valve* const me);
由于只有一个单例对象的实例,因此单例操作不需要上下文指针。请参阅单例对象以了解更多信息。
您可以使用 C_CG::Operation::Me 和 C_CG::Operation::MeDeclType 属性来更改为第一个自变量生成的名称。Me 属性指定用于第一个自变量的字符串(例如,“me”)。MeDeclType 属性指定第一个自变量的完整类型声明。其缺省值如下所示:
$objectName* const
objectName 变量将替换为对象类型的名称。向 objectName 变量中添加 a :i 开关可截断名称以仅留下大写字母。例如,对名称为 HomeHeatingSystem 的对象使用 $objectName:i 将会产生名称 HHS。
Rational Rhapsody 会在为操作生成的代码中自动插入 me 自变量,但请您务必记住在调用对象的操作时提供它。
由于 C 对函数具有平面名称空间,因此 Rational Rhapsody 使用命名约定来解决名称空间争用。所使用的约定是为每个(公用)操作添加它所操作的对象名称作为前缀。(请参阅操作的可视性以了解有关专用操作的不同命名约定的信息。)
例如,Valve 对象具有两个公用操作:open() 和 close()。这些操作的实施如下所示:
void Valve_open(struct Valve_t * const me); void Valve_close(struct Valve_t * const me);