15.3调用约定和链接名 按照C编译器的调用约定,编译器在C程序中的名字前添加一个下 划线来创建链接名。如果你用C调用约定但不提供链接名, Visual Prolog也将使用这个约定。注意:一直到buld6107编译器实际 上使用的是另一种命名策略,也就是说你必须用as来获取链接名 上例中qqqq的链接名是“qqqq"。如果你声明一个链接名,就必 须严格遵守这个规则 predicates rrrr:(integer) language c as"LinkName rr将用这个C调用约定,并有一个链接名 LinkName(即没有下 划线)。 2004.11.3 AI序设计
2004.11.3 AI程序设计 11 15.3 调用约定和链接名 ⚫ 按照C编译器的调用约定,编译器在C程序中的名字前添加一个下 划线来创建链接名。如果你用C调用约定但不提供链接名,Visual Prolog也将使用这个约定。注意:一直到build 6107编译器实际 上使用的是另一种命名策略,也就是说你必须用as来获取链接名。 上例中qqqq的链接名是“_qqqq”。如果你声明一个链接名,就必 须严格遵守这个规则: predicates rrrr : (integer) language c as "LinkName". ⚫ rrrr将用这个C调用约定,并有一个链接名LinkName(即没有下 划线)
15.3调用约定和链接名 ●C十+编译器通常用的是C调用约定,但是它们不依赖C链接名,因 为C++允许重载。也就是说,在C++中相同的名字只要变量数目 不同或者和类型不同,就可以看作为不同的函数使用。这些不同变 量必须有不同的链接名。因此C++编译器具有完善的命名机制, 这种命名基于C++名字、变量的数目和类型。这个过程可称为 “命名熨烫( name mangling)”。 不同的编译器采用不同的命名熨烫算法,从而互不兼容。通常情况 下,在被作为外部代码访问的C++程序中要使用明确的链接名, 或者在一个输出“C′部分封装这个声明,使编译器使用C命名约定。 2004.11.3 AI序设计
2004.11.3 AI程序设计 12 15.3 调用约定和链接名 ⚫ C++编译器通常用的是C调用约定,但是它们不依赖C链接名,因 为C++允许重载。也就是说,在C++中相同的名字只要变量数目 不同或者和类型不同,就可以看作为不同的函数使用。这些不同变 量必须有不同的链接名。因此C++编译器具有完善的命名机制, 这种命名基于C++名字、变量的数目和类型。这个过程可称为 “命名熨烫(name mangling)” 。 ⚫ 不同的编译器采用不同的命名熨烫算法,从而互不兼容。通常情况 下,在被作为外部代码访问的C++程序中要使用明确的链接名, 或者在一个输出“C”部分封装这个声明,使编译器使用C命名约定