User Tag List

+ Trả lời chủ đề
Hiện kết quả từ 1 tới 9 của 9

Chủ đề: Một số từ khóa trong C: auto, register, static và extern

  1. #1
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Một số từ khóa trong C: auto, register, static và extern

    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ụ:

    PHP Code:
    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ụ:

    PHP Code:
    {
    ...
    static 
    int x//x là biến cục bộ tĩnh
    ...

    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:
    PHP Code:
    int xy
    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

    PHP Code:
    extern int xy
    Ví dụ tệp extern.c

    PHP Code:
    /* vi du su dung tu khoa extern */
    #include <stdio.h>
    #include "vidu.h"
    extern int Xuat(int *, int);
    int a[5] = {12345};

    int main()
    {
        
    Xuat(a5);
        
    getchar();
    return 
    0;

    Tệp vidu.h

    PHP Code:
    int Xuat(int *aint n)
    {
        
    int i;
        
    printf("Cac phan tu cua mang:\n");
        for (
    i=0i<ni++)
              
    printf("a[%d] = %d\n"ia[i]);
        return 
    0;

    Có gì sai anh em cứ chém
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  2. Có 2 thành viên cảm ơn bài viết của 1973 có chất lượng:


  3. #2
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    liệu có khai báo extern static register int i; dc không Sang nhỉ ?

  4. #3
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    Quote Nguyên văn bởi pkthanh92 Xem bài viết
    liệu có khai báo extern static register int i; dc không Sang nhỉ ?
    Không được đâu, tớ vừa thử static register int i; thì báo lỗi multiple storage classes in declaration specifiers

  5. #4
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    vậy muốn biến vừa có thời gian tồn tại trong chương trình, vừa được lưu trữ trong thanh ghi thì phải làm thế nào ?

  6. #5
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    Quote Nguyên văn bởi pkthanh92 Xem bài viết
    vậy muốn biến vừa có thời gian tồn tại trong chương trình, vừa được lưu trữ trong thanh ghi thì phải làm thế nào ?
    Tớ vừa search thì tìm được bài này tuy nhiên đọc vẫn chưa hiểu lắm: http://bytes.com/topic/c/answers/216...atic-variables

    Nó nói gì đó đến việc xử lý đa luông, xử lý song song, và có lẽ cơ chế xử lý đó không cho phép vừa khai báo register cho biến static. Không biết có đúng không

  7. #6
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    hi, vị trí đặt biến khi khai báo static, extern và register là khác nhau, do vậy mình nghĩ là ko thể mix chúng được đâu, câu nên thêm điểm này trong bài viết

  8. #7
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    Quote Nguyên văn bởi pkthanh92 Xem bài viết
    hi, vị trí đặt biến khi khai báo static, extern và register là khác nhau, do vậy mình nghĩ là ko thể mix chúng được đâu, câu nên thêm điểm này trong bài viết
    Thanh có thể nói rõ là các kiểu biến đó đặt ở đâu không? (để minh chứng cho sự khác nhau í mà )

  9. #8
    HUT's Engineer
    Tham gia ngày
    Jun 2011
    Bài gửi
    686

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    cái này thì phải check google thôi,
    theo mình thì vị trí nó nằm ở đâu không quan trọng mà quan trọng là nó tách bạch

  10. #9
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Một số từ khóa trong C: auto, register, static và extern

    Từ khóa register chỉ có tác dụng 'gợi ý' cho trình biên dịch thôi, nếu không đủ thanh ghi thì nó vẫn lưu vào bộ nhớ như thường. Với các trình biên dịch hiện nay thì nó đủ thông minh để biết khai bao biến là register hay không (ví dụ như các biến đếm thường được lưu trong thanh ghi cho dù ta không chỉ rõ), nên tư khóa register cũng không cần thiết lắm.
    Ở C++11 thì từ khóa auto và extern có một số chức năng khác: http://diendan.congdongcviet.com/sho...02&postcount=4

  11. Tớ cảm ơn boss14420 đã chia sẻ.


+ Trả lời chủ đề

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Chủ đề tương tự

  1. [Video Lab 22] - Hướng dẫn cấu hình Static NAT, Dynamic NAT và NAT Overload
    Gửi bởi vnprovnpro trong mục Mạng và thiết bị mạng
    Trả lời: 0
    Bài cuối: 14-07-2011, 07:29 PM
  2. Auto không có đất sống trong Xích Bích
    Gửi bởi nguoibian_07 trong mục Game Online
    Trả lời: 0
    Bài cuối: 28-12-2009, 08:00 PM
  3. Trả lời: 0
    Bài cuối: 12-01-2009, 01:15 PM
  4. Trả lời: 0
    Bài cuối: 16-09-2008, 02:11 AM
  5. Trả lời: 0
    Bài cuối: 27-01-2008, 01:16 AM

Từ khóa (Tag) của chủ đề này

Quyền viết bài

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube