C++ cung cấp hai cơ chế quan trọng làm cho việc kết nối giữa chương trình C++ và chương trình ngôn ngữ khác trở nên dễ dàng hơn.
Cơ chế 1 : bộ chỉ định kết nối (extern) dùng để thông báo với trình biên dịch rằng
một hay một số hàm nào đó trong chương trình sẽ được kết nối với một ngôn ngữ khác, và chúng có thể có những qui ước khác về việc truyền tham số. Dạng tổng quát
extern “Language” { function_prototypes
}
Language : tên của ngôn ngữ mà hàm của chương trình cần kết nối
function_prototypes : các hàm cần kết nối
Tất cả các chỉ định kết nối phải mang tính toàn cục và nó không thể nằm bên trong một hàm. Ngoài ra có thể chỉ định kết nối cho các đối tượng (ít xảy ra).
Ví dụ 5.1 Chương trình sau kết nối hàm func() theo kiểu hàm của C hơn là hàm của
C++
// Illustrate linkage specifier. #include <iostream.h>
extern "C" int func(int x); // link as C function // This function now links as a C function.
int func(int x)
{
return x/3; }
Ví dụ 5.2 Đoạn chương trình sau thông báo với trình biên dịch rằng f1(), f2(), f3()
sẽ được kết nối như các hàm của C.
extern "C" {
void f1(); int f2(int x);
double f3(double x, int *p); }
Cơ chế 2 : từ khoá asm cho phép lập trình viên nhúng đoạn mã lệnh hợp ngữ vào
trong chương trình nguồn C++.
Ưu điểm : chương trình ứng dụng hoàn toàn là một chương trình C++ và nó không cần phải kết nối với các file chương trình hợp ngữ khác. Dạng tổng quát
asm(“op_code”) ;
op_code là một câu lệnh hợp ngữ nhúng trong chương trình.
Lưu ý Turbo C++ và Borland C++ chấp nhận một số dạng khác nhau của mệnh đề asm :
asm op_code;
asm op_code newline;
asm {
// statements;
}
Ví dụ 5.3 Đoạn chương trình sau nhúng nhiều câu lệnh hợp ngữ vào hàm func() // Don't try this function!
void func() { asm("mov bp, sp"); asm("push ax"); asm("mov cl, 4"); // ... } Bài tập V
1. Nghiên cứu tài liệu hướng dẫn sử dụng các trình biên dịch sau đây, những nội dung liên quan đến chỉ định kết nối và giao tiếp với asembly :
- Borland C++ version 4.5 hoặc cao hơn - Visual C++ version 6.0 hoặc cao hơn