Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: giúp mình các từ khóa mở rộng này của C với ....

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    21

    Mặc định giúp mình các từ khóa mở rộng này của C với ....

    Mình mới nhập môn C/C++ mà gặp mấy từ khóa này ..."Static , extern , register ,const , volatile " mà không hiểu chúng có tác dụng gì...\
    Ai biết chỉ giúp mình với / cho mình tài liệu tìm hiểu cũng được .Thanks.

  2. #2
    Ngày gia nhập
    08 2010
    Nơi ở
    Home-Hà Đông
    Bài viết
    51

    Các từ khóa auto và register dùng để khai báo các đối tượng có cấp lưu trữ động và phạm vi cục bộ. Các từ khóa extern và static dùng để khai báo các đối tượng (biến hoặc hàm) có thời gian lưu trữ tình và phạm vi toàn cục.

    auto: dùng để khai báo các biến cục bộ (tuy nhiên rất ít dùng vì mặc định khi khai báo biến cục bộ thì mặc định nó là auto rồi)
    register: đặt trước các biến nhằm yêu cầu trình biên dịch duy trì giá trị biến đó trên thanh ghi của máy tính nằm tăng tốc độ thực hiện (vì tốc độ truy cập dữ liệu trên thanh ghi rất nhanh). Ví dụ:

    C Code:
    1. register int a = 5;

    static: sử dụng để định nghĩa biến tĩnh, biến tĩnh là biến có thời gian tồn tại cùng chuơng trình, khi chương trình kết thúc thì biến tĩnh mới được giải phóng bộ nhớ. Thường sử dụng để khai báo biến cục bộ tĩnh. Ví dụ:

    C Code:
    1. {
    2. ...
    3. static int x; //x là biến cục bộ tĩnh
    4. ...
    5. }

    extern:
    sử dụng khi bạn muốn các hàm ở tệp này có thể truy cập đến các biến được khai báo haowjc gọi các hàm được định nghĩa ở một tệp khác.

    Chẳng hạn tệp A có chứa các biến toàn cục sau:

    C Code:
    1. int x, y;

    Tệp B muốn sử dụng các biến toàn cục trên tệp A thì cần khai báo

    C Code:
    1. extern int x, y;

    Ví dụ tệp extern.c

    C Code:
    1. /* vi du su dung tu khoa extern */
    2. #include <stdio.h>
    3. #include "vidu.h"
    4. extern int Xuat(int *, int);
    5. int a[5] = {1, 2, 3, 4, 5};
    6.  
    7. int main()
    8. {
    9.     Xuat(a, 5);
    10.     getchar();
    11. return 0;
    12. }

    Tệp vidu.h

    C Code:
    1. int Xuat(int *a, int n)
    2. {
    3.     int i;
    4.     printf("Cac phan tu cua mang:\n");
    5.     for (i=0; i<n; i++)
    6.           printf("a[%d] = %d\n", i, a[i]);
    7.     return 0;
    8. }
    Đã được chỉnh sửa lần cuối bởi heroandtn3 : 18-04-2012 lúc 10:02 AM.

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    21

    Thanks !......

  4. #4
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Mấy cái từ khoá này chả có cái nào được gọi là "mở rộng" hết, chẳng qua không chịu đọc sách hoặc mua nhầm sách lởm thôi.

    Ở C++11 thì
    - từ khoá auto còn có tác dụng khai báo biến nhưng không cần chỉ rõ kiểu, trình dịch sẽ xác định kiểu của biến lúc compile-time dựa vào kiểu trả về
    C++ Code:
    1. auto a = func(); // khai báo à là một biến có kiểu là kiểu trả về của func

    - từ khoá "extern" còn có ý nghĩa là khai báo một thể hiện của template class hoặc template function mà nó đã được instantiation ở một compile-unit khác. Nhờ đó cho phép giảm thời gian biên dịch những chương trình có sử dụng nhiều template.
    VD:
    C++ Code:
    1. // file class.h
    2. #ifndef _A_H_
    3. #define _A_H_
    4. template <class T> struct A {
    5.     void func1();
    6.     void func2();
    7. };
    8. #endif

    C++ Code:
    1. // file class.cpp
    2. #include "class.h"
    3.  
    4. template <class T> void A::func1() { /* code */}
    5. template <class T> void A::func2() { /* code */}
    6.  
    7. // explicit instantiation
    8. template class A<int>;
    9. template void A<char>::func1();

    C++ Code:
    1. // file main.cpp
    2. #include "class.h"
    3.  
    4. extern class template A<int>;
    5. extern template void A<char>::func1();
    6.  
    7. int main() {
    8.     A<int> ai;
    9.     ai.func1(), ai.func2();
    10.  
    11.     A<char> ac;
    12.     ac.func1();
    13.     // ac.func2(); /* sẽ có lỗi vì A<char>::func2() chưa được instantiation */
    14.  
    15. }
    Đã được chỉnh sửa lần cuối bởi boss14420 : 19-04-2012 lúc 09:12 PM.

Các đề tài tương tự

  1. Khóa học giúp bạn làm giàu trên intetnet
    Gửi bởi THUHONG137 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-03-2013, 02:08 AM
  2. SQLite với C/C++ Xử lý khóa ngoại trong SQLite? Giúp em với.
    Gửi bởi conglaogia trong diễn đàn Thắc mắc MySQL và SQLite
    Trả lời: 4
    Bài viết cuối: 19-04-2011, 12:48 AM
  3. Code tìm khóa trên lược đồ quan hệ CSDL. Giúp em?
    Gửi bởi nhoxonl trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 02-12-2010, 09:58 PM
  4. Bài tập C++ Sinh mã khóa tự động cho chương trình C++. Xin giúp đỡ?
    Gửi bởi giaicuu_505_1412 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 26-08-2010, 12:24 AM
  5. Ghi một khóa vào register bằng C# | Giúp mình đoạn mã này?
    Gửi bởi ngclam trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 14-04-2009, 11:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn