2008-11-21 35 views
10

Các thuật ngữ có ý nghĩa gì đối với mỗi ngôn ngữ trên? Tại sao các ngôn ngữ khác nhau (bất cứ nơi nào họ làm, nếu ở tất cả những gì họ làm) về mặt này?Tuyên bố, định nghĩa, khởi tạo trong C, C++, C#, Java và Python

+0

Nghe như bài tập về nhà với tôi. Nếu không, tại sao bạn muốn biết những khác biệt này? –

+2

@Paul, Đây có thể là bài tập về nhà của ai đó, nhưng điều đó không có nghĩa là không nên ở đây. Tôi đã tốt nghiệp nhiều năm trước và đây chính xác là những gì tôi đã tìm kiếm. Tôi muốn biết sự khác biệt vì vậy tôi sử dụng các thuật ngữ chính xác trong email và cuộc trò chuyện - chưa kể nếu tôi đăng câu hỏi trên SO. Các khái niệm là đủ để lập trình, nhưng không đủ để giao tiếp. – sage

+0

Tôi có nghĩa là âm thanh chính xác như câu hỏi từ bài tập về nhà. Ý nghĩa của câu hỏi là học sinh nên làm một số nghiên cứu, không chỉ tìm kiếm câu trả lời từ một trang web. Mà không phải là để nói rằng người giao bài tập về nhà đã không viết một câu hỏi hay, chỉ là câu hỏi không nên được cắt và dán ở đây. –

Trả lời

11

C/C++:

Một khai là một tuyên bố nói rằng "đây là tên của một cái gì đó và loại điều mà nó có, nhưng tôi không nói với bạn bất cứ điều gì thêm về nó".

Một định nghĩa là tuyên bố cho biết "đây là tên của một cái gì đó và chính xác là gì". Đối với các hàm, đây sẽ là phần thân hàm; đối với các biến toàn cầu, đây sẽ là đơn vị dịch mà biến nằm trong đó.

An khởi tạo là định nghĩa trong đó biến cũng được cung cấp giá trị ban đầu. Một số ngôn ngữ tự động khởi tạo tất cả các biến thành một số giá trị mặc định như 0, false hoặc null. Một số (như C/C++) không có trong tất cả các trường hợp: tất cả các biến toàn cục được mặc định khởi tạo, nhưng các biến cục bộ trên ngăn xếp và các biến được cấp động trên heap KHÔNG được khởi tạo mặc định - chúng có nội dung không xác định, vì vậy bạn phải khởi tạo một cách rõ ràng chúng. C++ cũng có các hàm khởi tạo mặc định, đó là một toàn bộ các sâu.

Ví dụ:


// In global scope: 
extern int a_global_variable; // declaration of a global variable 
int a_global_variable;   // definition of a global variable 
int a_global_variable = 3;  // definition & initialization of a global variable 

int some_function(int param); // declaration of a function 
int some_function(int param) // definition of a function 
{ 
    return param + 1; 
} 

struct some_struct; // declaration of a struct; you can use pointers/references to it, but not concrete instances 
struct some_struct // definition of a struct 
{ 
    int x; 
    int y; 
}; 

class some_class; // declaration of a class (C++ only); works just like struct 
class some_class // definition of a class (C++ only) 
{ 
    int x; 
    int y; 
}; 

enum some_enum; // declaration of an enum; works just like struct & class 
enum some_enum // definition of an enum 
{ 
    VALUE1, 
    VALUE2 
}; 

Tôi không phải là quen thuộc với các ngôn ngữ khác mà bạn được hỏi về, nhưng tôi tin rằng họ không làm cho nhiều sự khác biệt giữa tờ khai và định nghĩa. C# và Java có khởi tạo mặc định cho tất cả các đối tượng - mọi thứ được khởi tạo thành 0, false hoặc null nếu bạn không khởi tạo nó một cách rõ ràng. Python thậm chí còn lỏng lẻo hơn, vì các biến không cần phải được khai báo trước khi chúng được sử dụng. Kể từ khi các ràng buộc được giải quyết trong thời gian chạy, không có nhu cầu thực sự cho việc khai báo các hàm.