0

Từ khoá extern và asm

Một phần của tài liệu TEMPLATE VÀ HƯỚNG ĐỐI TƯỢNG (Trang 32-32 )

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

Một phần của tài liệu TEMPLATE VÀ HƯỚNG ĐỐI TƯỢNG (Trang 32 -32 )