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
Trả lời
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.
- 1. Tuyên bố hoặc Định nghĩa trong C
- 2. C tuyên bố và khởi
- 3. Tuyên bố và định nghĩa khác nhau trong C++
- 4. C++ mảng khởi động với tuyên bố
- 5. C++: bối rối tuyên bố ngữ nghĩa
- 6. C# Tuyên bố rỗng
- 7. Tuyên bố Khóa C#
- 8. C++ khởi tạo đối tượng và ngữ nghĩa hàm tạo
- 9. Objective-C Chuyển Tuyên Bố
- 10. Tuyên bố "CALLBACK" trong C làm gì?
- 11. Tuyên bố C này có ý nghĩa gì?
- 12. Tuyên bố chuyển đổi trong C#
- 13. Khởi tạo lớp python trong C#
- 14. Tuyên bố GOTO trong C# .NET
- 15. Tuyên bố IF nội tuyến trong C#
- 16. Tìm ra các Tuyên bố C
- 17. Java tương đương với C# 'sử dụng' tuyên bố
- 18. Tuyên bố từ điển giống như Python cho C#?
- 19. C++ - ý nghĩa của một tuyên bố kết hợp typedef và typename
- 20. C# Tuyên bố Foreach không chứa định nghĩa công khai cho GetEnumerator
- 21. C++ vector khởi tạo
- 22. C# PInvoke ra tuyên bố dây
- 23. Tuyên bố biến đổi chuỗi C++
- 24. mảng Java khởi tạo sau khi tuyên bố
- 25. C++ - std :: set không tuyên bố
- 26. Tuyên bố biến trong câu lệnh chuyển đổi C#
- 27. Khởi tạo Generic.List trong C#
- 28. C++ - Khởi tạo SOCKADDR_IN
- 29. Bỏ qua tuyên bố trả về trong C++
- 30. Tôi có thể "chuyển tiếp tuyên bố" trong C++?
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? –
@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
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. –