markdown:
# C (ngôn ngữ lập trình)
|Bài viết này
|cần thêm . ![ ](//upload.wikimedia.org/wikipedia/vi/thumb/2/25/LaptrinhC.jpg/220px-LaptrinhC.jpg)
![ ](http://upload.wikimedia.org/wikipedia/vi/thumb/2/25/LaptrinhC.jpg/220px-LaptrinhC.jpg)
*, của* [The C Programming Language](/w/index.php?title=The_C_Programming_Language&action=edit&redlink=1) [Brian Kernighan](/w/index.php?title=Brian_Kernighan&action=edit&redlink=1)và [Dennis Ritchie](/wiki/Dennis_Ritchie), lần xuất bản đầu tiên đã được dùng trong nhiều năm như là một đặc tả không chính thức về ngôn ngữ C **Ngôn ngữ lập trình C** là một ngôn ngữ [mệnh lệnh](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ki%E1%BB%83u_m%E1%BB%87nh_l%E1%BB%87nh&action=edit&redlink=1) được phát triển từ đầu [thập niên 1970](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1970) bởi [Dennis Ritchie](/wiki/Dennis_Ritchie) để dùng trong [hệ điều hành](/wiki/H%E1%BB%87_%C4%91i%E1%BB%81u_h%C3%A0nh) [UNIX](/wiki/Unix). Từ đó, ngôn ngữ này đã lan rộng ra nhiều hệ điều hành khác và trở thành một những ngôn ngữ phổ dụng nhất. C là ngôn ngữ rất có hiệu quả và được ưa chuộng nhất để viết các [phần mềm hệ thống](/wiki/Ph%E1%BA%A7n_m%E1%BB%81m_h%E1%BB%87_th%E1%BB%91ng), mặc dù nó cũng được dùng cho việc viết các [ứng dụng](/wiki/Ph%E1%BA%A7n_m%E1%BB%81m_%E1%BB%A9ng_d%E1%BB%A5ng). Ngoài ra, C cũng thường được dùng làm phương tiện giảng dạy trong [khoa học máy tính](/wiki/Khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh) mặc dù ngôn ngữ này không được thiết kế dành cho người nhập môn.
## Mục lục
[1 Các đặc trưng](#Các_đặc_trưng) [2 Cú pháp](#Cú_pháp) [3 Các vấn đề của C](#Các_vấn_đề_của_C) [4 Cú pháp](#Cú_pháp_2) [5 Lịch sử](#Lịch_sử) [6 Quan hệ với C++](#Quan_hệ_với_C++) [7 Ngôn ngữ trung gian](#Ngôn_ngữ_trung_gian) [8 Các trình dịch quan trọng](#Các_trình_dịch_quan_trọng) [9 Xem thêm](#Xem_thêm) [10 Tham khảo](#Tham_khảo) [11 Liên kết ngoài](#Liên_kết_ngoài)
## Các đặc trưng[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=1) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=1)]
### Tổng quan[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=2) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=2)]
C là một
[ngôn ngữ lập trình](/wiki/Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh) tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ [Assembler](/wiki/H%E1%BB%A3p_ng%E1%BB%AF) hơn hầu hết các [ngôn ngữ bậc cao](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_b%E1%BA%ADc_cao&action=edit&redlink=1). Hơn thế, C đôi khi được đánh giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với [ngôn ngữ bậc thấp](/wiki/Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh_b%E1%BA%ADc_th%E1%BA%A5p) như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì [Assembler](/wiki/H%E1%BB%A3p_ng%E1%BB%AF) chỉ có thể chạy trong một số máy tính đặc biệt. Vì lý do này C được xem là [ngôn ngữ bậc trung](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_b%E1%BA%ADc_trung&action=edit&redlink=1).
C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn với số lỗi ít hơn trong
[mẫu hình](/wiki/M%E1%BA%ABu_h%C3%ACnh) [lập trình thủ tục](/wiki/L%E1%BA%ADp_tr%C3%ACnh_th%E1%BB%A7_t%E1%BB%A5c) mà lại không đặt gánh nặng lên vai người viết ra [trình dịch](/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch) C, là những người bề bộn với các đặc tả phức tạp của ngôn ngữ. Cuối cùng C có thêm những chức năng sau:
- Một
[ngôn ngữ cốt lõi](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_c%E1%BB%91t_l%C3%B5i&action=edit&redlink=1)đơn giản, với các chức năng quan trọng chẳng hạn như là những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ [thư viện các thủ tục](/w/index.php?title=Th%C6%B0_vi%E1%BB%87n_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)&action=edit&redlink=1).
- Tập trung trên mẫu hình
[lập trình thủ tục](/wiki/L%E1%BA%ADp_tr%C3%ACnh_th%E1%BB%A7_t%E1%BB%A5c), với các phương tiện lập trình theo kiểu [cấu trúc](/wiki/L%E1%BA%ADp_tr%C3%ACnh_c%E1%BA%A5u_tr%C3%BAc).
- Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa thực dụng.
- Dùng ngôn ngữ
[tiền xử lý](/wiki/Ti%E1%BB%81n_x%E1%BB%AD_l%C3%BD), tức là các câu lệnh [tiền xử lý C](/wiki/Ti%E1%BB%81n_x%E1%BB%AD_l%C3%BD_C), cho các nhiệm vụ như là định nghĩa các [macro](/w/index.php?title=Macro&action=edit&redlink=1)và hàm chứa nhiều tập tin [mã nguồn](/wiki/M%C3%A3_ngu%E1%BB%93n)(bằng cách dùng câu lệnh tiền xử lý dạng
#includechẳng hạn).
- Mức thấp của ngôn ngữ cho phép dùng tới
[bộ nhớ máy tính](/wiki/B%E1%BB%99_nh%E1%BB%9B)qua việc sử dụng kiểu dữ liệu
pointer.
- Số lượng từ khóa rất nhỏ gọn.
- Các
[tham số](/wiki/Tham_s%E1%BB%91_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh))được đưa vào các hàm bằng giá trị, không bằng địa chỉ.
- Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho
[tính đóng](/w/index.php?title=T%C3%ADnh_%C4%91%C3%B3ng_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh&action=edit&redlink=1)và [tính đa hình](/w/index.php?title=T%C3%ADnh_%C4%91a_h%C3%ACnh&action=edit&redlink=1).
- Hỗ trợ các
[bản ghi](/w/index.php?title=B%E1%BA%A3n_ghi_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1)hay các kiểu dữ liệu kết hợp do người dùng từ khóa định nghĩa
structcho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và được điều chỉnh như là toàn bộ.
Một số chức năng khác mà C không có (hay còn thiếu) nhưng có thể tìm thấy ở các ngôn ngữ khác bao gồm:
[An toàn kiểu](/w/index.php?title=An_to%C3%A0n_ki%E1%BB%83u&action=edit&redlink=1),
- Tự động
[Thu dọn rác](/w/index.php?title=Thu_d%E1%BB%8Dn_r%C3%A1c_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1),
- Các
[lớp](/wiki/L%E1%BB%9Bp_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh))hay các [đối tượng](/w/index.php?title=%C4%90%E1%BB%91i_t%C6%B0%E1%BB%A3ng_(OOP)&action=edit&redlink=1)cùng với các ứng xử của chúng (xem thêm [OOP](/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng)),
- Các
[hàm lồng nhau](/w/index.php?title=H%C3%A0m_l%E1%BB%93ng_nhau&action=edit&redlink=1), [Lập trình tiêu bản](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ti%C3%AAu_b%E1%BA%A3n&action=edit&redlink=1)hay [Lập trình phổ dụng](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ti%C3%AAu_b%E1%BA%A3n&action=edit&redlink=1), [Quá tải](/w/index.php?title=Qu%C3%A1_t%E1%BA%A3i_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1)và [Quá tải toán tử](/w/index.php?title=Qu%C3%A1_t%E1%BA%A3i_to%C3%A1n_t%E1%BB%AD&action=edit&redlink=1),
- Các hỗ trợ cho
[đa luồng](/w/index.php?title=%C4%90a_lu%E1%BB%93ng&action=edit&redlink=1), [đa nhiệm](/w/index.php?title=%C4%90a_nhi%E1%BB%87m&action=edit&redlink=1)và [mạng](/wiki/M%E1%BA%A1ng_m%C3%A1y_t%C3%ADnh).
Mặc dù C còn thiếu nhiều chức năng hữu ích nhưng lý do quan trọng để C được chấp nhận vì nó cho phép các trình dịch mới được tạo ra một cách nhanh chóng trên các nền tảng mới và vì nó cho phép
[người lập trình](/wiki/L%E1%BA%ADp_tr%C3%ACnh_vi%C3%AAn) dễ kiểm soát được những gì mà chương trình (do họ viết) thực thi. Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ khác. Thường thì chỉ có ngôn ngữ [ASM](/wiki/H%E1%BB%A3p_ng%E1%BB%AF) chỉnh bằng tay chạy nhanh hơn (ngôn ngữ C), bởi vì [ASM](/wiki/H%E1%BB%A3p_ng%E1%BB%AF) kiểm soát được toàn bộ máy. Mặc dù vậy, với sự phát triển các trình dịch C, và với sự phức tạp của các [CPU](/wiki/CPU) hiện đại có tốc độ cao, C đã dần thu nhỏ khác biệt về tốc độ này.
Một lý do nữa cho việc C được sử dụng rộng rãi và hiệu quả là do các trình dịch, các thư viện và các
[phần mềm thông dịch](/w/index.php?title=Ph%E1%BA%A7n_m%E1%BB%81m_th%C3%B4ng_d%E1%BB%8Bch&action=edit&redlink=1) của các ngôn ngữ bậc cao khác lại thường được tạo nên từ C.
### Ví dụ "hello, world"[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=3) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=3)]
Ví dụ đơn giản sau đây được thấy trong lần in đầu tiên của cuốn "
[The C Programming Language](/w/index.php?title=The_C_Programming_Language&action=edit&redlink=1)", và đã trở thành bài tiêu chuẩn trong chương nhập môn của hầu hết các loại sách giáo khoa về lập trình. Chương trình hiển thị câu "hello, world!" trên [đầu ra chuẩn](/w/index.php?title=%C4%90%E1%BA%A7u_ra_chu%E1%BA%A9n&action=edit&redlink=1), mà thường là một màn hình. Mặc dù vậy, nó có thể xuất ra một tập tin hay xuất ra trên một thiết bị phần cứng kể cả trên một [vùng chứa](/w/index.php?title=V%C3%B9ng_ch%E1%BB%A9a&action=edit&redlink=1), tùy thuộc vào việc đầu ra chuẩn được chỉ thị vào đâu khi chương trình này được thực thi.
1 #include <stdio.h> 2 int main(void) 3 { 4 printf("hello, world!"); 5 return 0; 6 }
Chương trình trên sẽ dịch đúng trong hầu hết các trình dịch hỗ trợ chuẩn
[ANSI C](/w/index.php?title=ANSI_C&action=edit&redlink=1) hay chuẩn [C99](#C99).
Sau đây là các phân tích theo từng dòng mã của ví dụ trên
1 #include <stdio.h>
[tiền xử lý](/wiki/Ti%E1%BB%81n_x%E1%BB%AD_l%C3%BD)
#include. Điều này sẽ làm cho bộ tiền xử lý (bộ tiền xử lý này là một công cụ để kiểm tra mã nguồn trước khi nó được dịch) tiến hành thay dòng lệnh đó bởi toàn bộ các dòng mã hay thực thể trong tập tin mà nó đề cập đến (tức là tập tin
stdio.h). Dấu ngoặc nhọn bao quanh
stdio.hcho biết rằng tập tin này có thể tìm thấy trong các nơi đã định trước cho bộ tiền xử lý biết thông qua các
*đường tìm kiếm*đến các tập tin
header. Tập hợp các tập tin được khai báo sử dụng qua các chỉ thị tiền xử lý còn được gọi là
**các tập tin bao gồm**.
2 int main(void)
main. Hàm này có mục đích đặc biệt trong C. Khi chương trình thi hành thì hàm
main()được gọi trước tiên. Phần mã
intchỉ ra rằng
*giá trị trả về*của hàm
main(tức là giá trị mà
main()sẽ được trả về sau khi thực thi) sẽ có kiểu là một số nguyên. Còn phần mã
(void)cho biết rằng hàm
mainsẽ không cần đến tham số để gọi nó. Xem thêm
[Void](/wiki/Void_(ki%E1%BB%83u_d%E1%BB%AF_li%E1%BB%87u))
.
3 {
Dấu '{' cho biết sự bắt đầu của định nghĩa của hàm
main.
4 printf("hello, world\n");
Dòng trên gọi đến một hàm chuẩn khác tên là
. Hàm này đã được khai báo trước đó trong tập tin
[printf](/w/index.php?title=Printf&action=edit&redlink=1)
stdio.h. Dòng này sẽ cho phép tìm và thực thi mã (đã được hỗ trợ sẵn) với ý nghĩa là hiển thị lên đầu ra chuẩn dòng chữ
hello, world<ký tự xuống dòng EOL-chuyển dấu nhắc sang dòng mới>.
Mã ký tự
\n là một
*dãy thoát* được chuyển dịch thành dấu ký tự EOL (viết tắt từ chữ *End-Of-Line*) có nghĩa là chuyển vị trí [dấu nhắc](/w/index.php?title=D%E1%BA%A5u_nh%E1%BA%AFc&action=edit&redlink=1) xuống đầu một dòng kế. Gía trị trả về của hàm
printf (theo khai báo nguyên mẫu chuẩn của hàm này trong C) có kiểu
int, nhưng vì giá trị trả về này không được (người lập trình) dùng tới nên giá trị đó bị bỏ qua (một cách lặng lẽ).
5 return 0;
Dòng này sẽ kết thúc việc thực thi mã của hàm
main và buộc nó trả về giá trị 0 (là một số nguyên như khai báo ban đầu
int main ).
6 }
Dấu '}' cho biết việc kết thúc mã cho hàm
main.
### Các kiểu[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=4) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=4)]
C có một hệ thống kiểu tương tự như của
[Pascal](/wiki/Pascal_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)), mặc dù chúng khác nhau trong một số khía cạnh. Có nhiều kiểu cho các số nguyên với nhiều cỡ cho có đấu và không có dấu, có kiểu số [floating point](/w/index.php?title=Floating_point&action=edit&redlink=1), kiểu các ký tự
char, các kiểu thứ tự
enum, kiểu bản ghi
record và kiểu đơn vị
union.
C tạo ra sự mở rộng mạnh mẽ việc sử dụng của kiểu các con trỏ
, một dạng đơn giản các
[pointer](/w/index.php?title=Pointer&action=edit&redlink=1) [tham chiếu](/w/index.php?title=Tham_chi%E1%BA%BFu_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1) mà chúng chứa địa chỉ các vùng nhớ. Các con trỏ có thể được *tham chiếu ngược* ( *dereference*) để lấy về giá trị của dữ liệu được chứa trong địa chỉ đó (địa chỉ mà con trỏ chỉ vào). Địa chỉ này có thể được điều chỉnh bằng các phép gán thông thường và các [phép toán số học trên con trỏ](/w/index.php?title=Ph%C3%A9p_to%C3%A1n_s%E1%BB%91_h%E1%BB%8Dc_tr%C3%AAn_con_tr%E1%BB%8F&action=edit&redlink=1). Trong thời gian thực thi, một con trỏ đại diện cho một địa chỉ của bộ nhớ. Trong thời gian chuyển dịch, nó là một kiểu phức tạp đại diện cho cả địa chỉ và kiểu của dữ liệu. Điều này cho phép các biểu thức bao gồm các con trỏ được kiểm tra về kiểu. Các con trỏ thì được dùng cho nhiều mục tiêu trong C. Các dòng ký tự
string thường được đại diện bởi một con trỏ chỉ tới một dãy của các ký tự. Sự
[cấp phát bộ nhớ động](/w/index.php?title=C%E1%BA%A5p_ph%C3%A1t_b%E1%BB%99_nh%E1%BB%9B_%C4%91%E1%BB%99ng&action=edit&redlink=1), được miêu tả sau đây, thì được tiến hành thông qua các con trỏ.
Một
* có nghĩa là nó không chỉ đến một chỗ nào hết. Điều này có ích trong những trường hợp như là con trỏ con trỏ rỗng*
trong một nút cuối của một
next [danh sách liên kết](/w/index.php?title=Danh_s%C3%A1ch_li%C3%AAn_k%E1%BA%BFt&action=edit&redlink=1)
linked list. Việc tham chiếu ngược một con trỏ trống gây ra các biểu hiện không dự đoán trước được. Các con trỏ kiểu
voidthì lại có thể chỉ đến một đối tượng mà không cần biết kiểu của đối tượng đó. Điều này đặc biệt hữu dụng trong
[lập trình tiêu bản](/w/index.php?title=L%E1%BA%ADp_tr%C3%ACnh_ti%C3%AAu_b%E1%BA%A3n&action=edit&redlink=1)bởi vì cỡ và kiểu của các đối tượng mà chúng chỉ tới thì không thể biết được và do đó không thể thực hiện tham chiếu ngược, nhưng chúng lại có thể được hoán chuyển thành các con trỏ của các kiểu khác.
Các kiểu mảng
array trong C thì có cỡ cố định, độ lớn tĩnh của nó phải được biết trước trong thời gian chuyển dịch. Điều này gây nhiều trở ngại trong thực tế bởi vì người ta có thể chỉ định các vùng nhớ ở thời gian thực thi dựa trên các thư viện chuẩn và hành xử chúng như là các mảng. Không như các ngôn ngữ khác, C biểu thị các mảng giống như trường hợp các con trỏ: chúng đóng vai trò một địa chỉ của bộ nhớ và một kiểu dữ liệu. Do đó, các giá trị chỉ số có thể vượt quá cỡ của một mảng.
C cũng cung cấp các kiểu mảng đa chiều. Các giá trị chỉ số của các mảng đa chiều thì được gán theo thứ tự hàng chính. Một cách có ý nghĩa thì các mảng này hoạt động như là mảng của các mảng nhưng thực chất chúng được phân bố như là mảng một chiều với việc tính và tạo các vị trí tương đối.
C thường được dùng trong việc lập trình các hệ thống bậc thấp, ở đó có thể cần thiết để xem số nguyên như là một địa chỉ của bộ nhớ, là một giá trị
*double precision*, hay là một kiểu con trỏ. Trong các trường hợp này, C cung cấp việc *hoán chuyển*, mà phép toán này sẽ bắt buộc chuyển đổi giá trị từ một kiểu sang một kiểu khác. Dùng phép *hoán chuyển* sẽ làm mất đi phần nào tính an toàn mà thường được cung cấp bởi hệ thống kiểu.
### Lưu trữ dữ liệu[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=5) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=5)]
Một trong những chức năng quan trọng nhất của một ngôn ngữ lập trình là việc cung cấp cơ sở cho việc quản lý
[bộ nhớ](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9B_(m%C3%A1y_t%C3%ADnh)&action=edit&redlink=1) và các đối tượng được chứa trong bộ nhớ. C cung ứng 3 phương cách để cấp phát bộ nhớ cho các đối tượng:
-
Sự
[cấp phát vùng nhớ tĩnh](/w/index.php?title=C%E1%BA%A5p_ph%C3%A1t_v%C3%B9ng_nh%E1%BB%9B_t%C4%A9nh&action=edit&redlink=1): khoảng trống dành cho đối tượng thì được cung cấp trong phần mã nhị phân ở thời gian dịch; những đối tượng này có một thời gian sống lâu dài theo sự tồn tại của phần mã nhị phân chứa chúng (các đối tượng).
-
Sự
[cấp phát vùng nhớ tự động](/w/index.php?title=C%E1%BA%A5p_ph%C3%A1t_v%C3%B9ng_nh%E1%BB%9B_t%E1%BB%B1_%C4%91%E1%BB%99ng&action=edit&redlink=1): Các đối tượng tạm thời có thể được chứa trong một chồng ( *stack*), và khoảng trống này thì được trả về một cách tự động và có thể được dùng lại sau khi khối mã mà chúng (tức các đối tượng tạm thời) được khai báo đã thực thi xong.
-
Sự
[cấp phát vùng nhớ động](/w/index.php?title=C%E1%BA%A5p_ph%C3%A1t_v%C3%B9ng_nh%E1%BB%9B_%C4%91%E1%BB%99ng&action=edit&redlink=1): Các khối của bộ nhớ với bất kì cỡ lớn mong muốn nào đều có thể được yêu cầu (hay xin) trong thời gian thi hành bằng cách dùng các hàm thư viện như là
,
[malloc()](/w/index.php?title=Malloc&action=edit&redlink=1)
và
[realloc()](/w/index.php?title=Malloc&action=edit&redlink=1)
từ một khu vực của bộ nhớ có tên là
[free()](/w/index.php?title=Malloc&action=edit&redlink=1) [heap](/w/index.php?title=Dynamic_memory_allocation&action=edit&redlink=1); các khối này có thể được tái dụng sau khi gọi hàm
để hoàn trả chúng lại cho bộ nhớ.
[free()](/w/index.php?title=Malloc&action=edit&redlink=1)
Ba phương án này thích hợp cho các tình huống khác nhau và có những hậu quả khác nhau. Ví dụ, kiểu cấp phát tĩnh sẽ không cần thời gian (để tính toán) cho sự cấp phát, kiểu cấp phát tự động sẽ cần một khoảng thời gian nào đó cho dự tính, và kiểu cấp phát động có thể đòi hỏi một lượng lớn thời gian dùng dễ tính toán cho việc cấp phát và hoàn trả (các vùng nhớ đã được yêu cầu trước đó). Mặt khác, khoảng trống của chồng thường giới hạn cho vùng nhớ tĩnh hay cho khoảng trống của heap, và chỉ kiểu cấp phát vùng nhớ động là cho phép sự cấp phát cho các đối tượng mà kích thước của nó chỉ có thể biết được trong lúc thi hành. Hầu hết các chương trình C đều dùng nhiều cả ba phương cách này.
Khi có thể thì sự cấp phát tự động hay sự cấp phát tĩnh thường được dề nghị dùng vì kho nhớ được quản lý bởi trình dịch, giải phóng cho người lập trình những lồi lầm phiền hà khi phải xin cấp phát và hoàn trả các vùng nhớ bằng tay. Rất tiếc nhiều cấu trúc dữ liệu có thể trương nở trong thời gian thực thi và vì kiểu cấp phát tĩnh và kiểu tự động phải có một độ lớn cố định ở thời gian dịch nên trong nhiều tình huống mà buộc phải dùng kiểu cấp phát động. Các dãy thay đổi về độ lớn là một ví dụ điển hình của trường hợp này. (Xem ví dụ từ bài
[malloc](/w/index.php?title=Malloc&action=edit&redlink=1) về các dãy được cấp phát vùng nhớ động.)
## Cú pháp[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=6) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=6)]
Không như
[Fortran](/wiki/Fortran), C là ngôn ngữ dạng tự do, cho phép [người lập trình](/wiki/L%E1%BA%ADp_tr%C3%ACnh_vi%C3%AAn) tùy tiện sử dụng ký tự
whitespace để xếp đặt (cách trình bày) mã nguồn. Các dòng chú giải hoặc có thể đặt nằm giữa
/* và
*/ hoặc viết từng dòng bắt đầu bởi
// theo sau đó là các chú giải.
Mỗi tập tin chứa mã có thể chứa các khai báo và các định nghĩa hàm. Các định nghĩa hàm, chính chúng, cũng chứa các khai báo và các mệnh đề. Các khai báo thì hoặc là định nghĩa những kiểu mới với các từ khoá như
struct,
union, và
enum, hoặc là gán các kiểu và đăng ký vùng chứa (trong bộ nhớ) cho các biến mới (Ví dụ: char *myname = "ABC"). Các từ khoá như là
char và
int cũng như là ký hiệu con trỏ chỉ tới
* là các kiểu sẵn có. Các khối mã thì được đóng ở giữa các dấu
{ và
} để chỉ ra phần (mã) mà các khai báo và các cấu trúc điều khiển (bên trong dấu ngoặc) có hiệu lực.
Như là một ngôn ngữ mệnh lệnh, C phụ thuộc vào các mệnh đề (câu lệnh) để làm hầu hết các việc. Hầu hết các mệnh đề lại là các mệnh đề biểu thức mà một cách đơn giản chúng tạo nên việc đánh giá các biểu thức đó—và trong quá trình này, các biến nhận được các giá trị mới hoặc các giá trị này được trả ra. Các mệnh đề dòng điều khiển cũng có hiệu lực cho việc thực thi có điều kiện hay có lặp lại, mà chúng được cấu tạo với các từ khóa như là
if,
else,
switch,
do,
while và
for. Các nhảy dòng cũng có thể thực hiện qua câu lệnh
goto. Nhiều phép toán khác nhau được cung cấp sẵn để thực thi trên các phép tính cơ sản về số học, lô gíc, so sánh, kiểu bit, chỉ số của mảng, và phép gán giá trị. Các biểu thức cũng gọi các hàm, bao gồm một số lượng lớn các hàm thư viện, để tiến hành các thao tác chung.
## Các vấn đề của C[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=7) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=7)]
Một câu nói phổ biến được người ta lập lại nhiều lần của một nhà thiết kế trình dịch
[Bjarne Stroustrup](/wiki/Bjarne_Stroustrup), người sáng lập ra [C++](/wiki/C%2B%2B), là " *C makes it easy to shoot yourself in the foot.*" (tạm dịch: "C làm cho việc bạn tự hại bạn trở nên dễ dàng") [[1]](http://www.research.att.com/~bs/bs_faq.html#really-say-that). Nói cách khác, C cho phép nhiều phép toán không mong muốn trong một cách tổng quát, và do đó, nhiều lỗi đơn giản đã được tạo ra bởi một người lập trình mà chúng lại không thể phát hiện qua trình dịch hay ngay cả không phát hiện ra trong lúc thi hành. Điều này là nguyên nhân của một số chương trình có các ứng xử không lường trước được và có các lỗ hổng về an toàn. Một dị bản ngôn ngữ C là [Cyclone](/w/index.php?title=Cyclone&action=edit&redlink=1) điều chỉnh được một phần trong số các vấn đề như vậy.
Một lý do của các vấn đề nêu trên là để tránh cho cái giá quá cao phải trả cho việc kiểm soát (lỗi) ở thời gian dịch và thời gian thi hành. Một lý do khác là sự đòi hỏi để giữ C được càng hiệu quả và càng uyển chuyển càng tốt. Một ngôn ngữ càng mạnh thì càng khó khăn cho ngôn ngữ lập trình đó để làm rõ ràng mọi thứ trong các chương trình (được viết trong ngôn ngữ này). Một số việc kiểm tra đã được dựa trên các công cụ bên ngoài, những công cụ như vậy được bàn đến trong phần
*Các công cụ kiểm tra tĩnh bên ngoài cho trình dịch*.
### Sự cấp phát vùng nhớ[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=8) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=8)]
Một vấn đề với C (và đây thường là vấn đề lớn cho những người mới làm quen với C) là việc cấp phát (vùng nhớ) một cách
[tự động](#AUTO) hay một cách [động](#DYNAMIC) cho các đốì tượng mà không khởi động chúng. Các đối tượng này, ban đầu, chứa các giá trị bất kì trong khoảng nhớ mà chúng được cấp phát. Các giá trị này có thể là các giá trị ngẫu nhiên còn lại trong bộ nhớ mà chưa được làm sạch, chúng hoàn toàn không dự đoán được. Nếu một chương trình có khai biến mà lại không gán giá trị ban đầu, thường là 0 (cho kiểu số) hay null (cho kiểu con trỏ) hay "" (cho kiểu dãy ký tự,...) thì có thể gây ra các phản ứng không lường trước được của chương trình đó. Hầu hết các trình dịch C hiện đại có thể phát hiện và cảnh cáo về việc "quên gán giá trị khởi động" trong nhiều trường hợp, nhưng cũng không hoàn toàn hiệu quả.
Một vấn đề thường thấy khác là bộ nhớ
heap không thể được tái dụng cho tới khi nó được hoàn trả lại về cho bộ nhớ bởi người lập trình bằng câu lệnh
free(). Hậu quả là nếu người lập trình quên hoàn trả các vùng đã cấp phát về cho bộ nhớ và lại tiếp tục dùng các lệnh cấp phát, thì càng lúc càng nhiều các phần của bộ nhớ bị chiếm chỗ. Lỗi này là một loại lỗi kiểu
memory leak tức là "rỉ bộ nhớ". Ngược lại, cũng có trường hợp trả tự do phần đã cấp phát về cho bộ nhớ quá sớm và lại tiếp tục sử dụng vùng nhớ đã trả về thì cũng có thể dễ gây ra việc nhận sai các giá trị hay tạo ra các tình huống không lường trước được. Lý do là vì máy tính khi nhận lại các vùng đã được trả sẽ có thể dùng vùng nhớ đó cho các việc khác. Một số ngôn ngữ xử lý chuyện này với việc
[tự động dọn rác](/w/index.php?title=D%E1%BB%8Dn_r%C3%A1c_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1).
### Các con trỏ[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=9) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=9)]
Các con trỏ là một nguồn gốc chính của nhiều nguy hiểm bởi vì chúng không được kiểm tra, một con trỏ có thể được tạo ra để chỉ tới bất kì đối tượng nào bất kể kiểu nào, kể cả các mã (nhị phân), và khi được dùng đến (hay được viết ra), có thể gây ra các hiệu ứng không lường trước được. Mặc dù hầu hết các con trỏ thường chỉ tới các chỗ an toàn, chúng vẫn có thể di chuyển tới những chỗ không an toàn như khi dùng các phép toán số học trên các con trỏ (thường là cộng trừ trên các địa chỉ mà chúng chỉ tới), vùng nhớ chỗ chúng chỉ tới có thể đã được trả về và đã được tái dụng (
[con trỏ đu đưa](/w/index.php?title=Con_tr%E1%BB%8F_%C4%91u_%C4%91%C6%B0a&action=edit&redlink=1)), chúng có thể đã không được khởi động ( [con trỏ hoang](/w/index.php?title=Con_tr%E1%BB%8F_hoang&action=edit&redlink=1)), hay chúng được trực tiếp gán một giá trị nào đó qua việc dùng toán tử đổi kiểu ( *cast*) hoặc được gán qua một con trỏ đã bị hủy hoại. Một vấn đề khác với các con trỏ là việc C cho phép tự do chuyển đổi giữa hai kiểu con trỏ bất kì. Các ngôn ngữ khác điều chỉnh các vấn đề này bằng cách dùng các kiểu [tham chiếu](/w/index.php?title=Tham_chi%E1%BA%BFu&action=edit&redlink=1) bị giới hạn hơn.
### Các mảng[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=10) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=10)]
Mặc dù C có hỗ trợ riêng cho các mảng tĩnh, nhưng nó không kiểm tra xem các chỉ số mảng có hợp lệ hay không (
[kiểm tra biên](/w/index.php?title=Ki%E1%BB%83m_tra_bi%C3%AAn&action=edit&redlink=1)). Thí dụ, người ta có thể viết phần tử thứ sáu của một mảng được định nghĩa với 5 phần tử, và điều này có thể mang lại các hậu quả không mong muốn. Lỗi này thuộc loại [lỗi tràn bộ nhớ đệm](/wiki/L%E1%BB%97i_tr%C3%A0n_b%E1%BB%99_nh%E1%BB%9B_%C4%91%E1%BB%87m). Đây là nguồn gốc của nhiều [lỗ hổng an ninh](/w/index.php?title=L%E1%BB%97_h%E1%BB%95ng_an_ninh&action=edit&redlink=1) trong các chương trình viết bằng C. Mặt khác, do sự giới hạn về kỹ thuật kiểm tra biên ở thời điểm C ra đời (khi gần như chưa có kỹ thuật kiểm tra biên), nên việc kiểm tra biên trở nên ảnh hưởng nặng đến tốc độ thực thi, đặc biệt là trong các tính toán số.
Các mảng đa chiều rất cần thiết khi cài đặt các thuật toán số (chủ yếu áp dụng cho
[đại số tuyến tính](/wiki/%C4%90%E1%BA%A1i_s%E1%BB%91_tuy%E1%BA%BFn_t%C3%ADnh)) để chứa các ma trận. Nhưng cấu trúc mảng theo C không những không đáp ứng mà còn không tương hợp cho thao tác chuyên biệt này. Vấn đề này đã được bàn thảo trong sách *Numerical Recipes in C*, chương 1.2, trang 20 ff ( [đọc trực tuyến](http://www.library.cornell.edu/nr/bookcpdf/c1-2.pdf)). Người ta có thể tìm thấy ở đây một giải pháp tốt được dùng xuyên suốt trong cả cuốn sách này.
### Các hàm tham lượng động[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=11) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=11)]
Một vấn đề thường thấy khác là về các
[hàm tham lượng động](/w/index.php?title=H%C3%A0m_tham_l%C6%B0%E1%BB%A3ng_%C4%91%E1%BB%99ng&action=edit&redlink=1) ( *variadic function*), tức là, các hàm mà có thể thay đổi được số lượng của các tham số. Không giống như các nguyên mẫu khác của hàm trong C, kiểm tra số lượng tham số ở thời điểm dịch là không bắt buộc bởi tiêu chuẩn, và một cách tổng quát là không thể kiểm tra được nếu không có thêm thông tin. Nếu dữ liệu có kiểu không đúng được chuyển vào, thì hậu quả sẻ không lường được, và thường tạo sự hư hại hoàn toàn. Các hàm tham lượng động cũng xử lý các hằng số con trỏ rỗng trong một cách không biết trước được.
- Thí dụ: Họ các hàm
[printf](/w/index.php?title=Printf&action=edit&redlink=1)cung cấp bởi thư viện chuẩn, được dùng để định dạng các dòng chữ xuất ra, thì có tiếng vì các lỗi trong giao diện tham lượng động của nó; nó dựa trên một sự định dạng của dãy ký tự để biểu trưng số và kiểu của các tham số theo sau.
Mặc dù kiểm tra kiểu của các hàm tham lượng động từ thư viện chuẩn là một vấn đề về chất lượng của sự thiết lập, nhiều trình dịch hiện đại đặc biệt tiến hành kiểm tra kiểu của việc gọi
printf, và sản sinh ra các cảnh cáo nếu danh mục tham số mà không tương ứng với dãy ký tự định dạng. Dẫu sao thì không phải tất cả các lần gọi printf đều có thể được kiểm tra một cách tĩnh bởi vì có thể dãy ký tự định dạng chỉ được lập thành ở thời gian thực thi, khi mà các hàm tham lượng động thường vẫn không kiểm tra được.
## Cú pháp[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=12) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=12)]
C có nhiều điểm yếu trong cú pháp. Đáng chú ý là:
- Nguyên mẫu của hàm nào không chỉ ra tham số nào thì được hiểu ngầm là cho phép một tập bất kì các tham số. Một vấn đề về cú pháp đã được đề ra cho khả năng tương thích ngược của K&R C, về việc thiếu các nguyên mẫu.
- Một số sự chọn lựa đáng ngờ vực về thứ tự ưu tiên của các toán tử, chẳng hạn như
=="nối kết" một cách chặt chẽ hơn
&và
|trong các biểu thức như là
x & 1 == 0.
- Việc dùng toán tử "=" một cách dễ nhầm lẫn. Nếu dùng trong đẳng thức toán học để chỉ các phép gán, dẫn tới các phép gán không chủ định trong việc so sánh và dẫn tới một ấn tượng sai lầm rằng phép gán có tính bắc cầu. Ví dụ: việc dùng câu lệnh
if (x=0) {...}sẽ dễ gây ra các lỗi bất ngờ.
- Thiếu các toán tử
[infix](/w/index.php?title=Infix&action=edit&redlink=1)cho các đối tượng phức tạp, đặc biệt là cho các phép toán trên dãy các ký tự làm cho chương trình phụ thuộc nặng nề lên các phép toán rất khó đọc.
- Dựa vào quá nhiều trên hệ thống ký hiệu làm cơ sở cho cú pháp ngay cả ở nơi không tường minh như là "&&" và "||" thay vì dùng "and" và "or".
- Cú pháp khai báo không được dễ hiểu, đặc biệt cho hàm của các con trỏ. Trong tình huống hoàn toàn tương tự của C++, nhà nghiên cứu
[Damian Conway](/w/index.php?title=Damian_Conway&action=edit&redlink=1)nói về cú pháp của khai báo như sau:
- Khó để mà đặc tả một kiểu trong C++ bởi vì thực tế là một số phần tử của việc khai báo (như là con trỏ) thì là các toán tử tiền tố trong khi một số khác (như là mảng) lại là toán tử hậu tố (nghĩa là phải đặt
*đứng trước tên con trỏ và dặt
[]sau tên mảng—người dịch). Nhừng toán tử khai báo này lại có các thứ tự ưu tiên khác nhau, cần phải được đặt trong các dấu ngoặc cẩn thận để đạt được sự khai báo mong muốn.
*Ben Werther & Damian Conway.*
- Khó để mà đặc tả một kiểu trong C++ bởi vì thực tế là một số phần tử của việc khai báo (như là con trỏ) thì là các toán tử tiền tố trong khi một số khác (như là mảng) lại là toán tử hậu tố (nghĩa là phải đặt
[A Modest Proposal: C++ Resyntaxed](http://www.csse.monash.edu.au/~damian/papers/HTML/ModestProposal.html#section3.1.1). Section 3.1.1. 1996.
### Các vấn đề về bảo trì[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=13) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=13)]
Có một số vấn đề khác của C mà không trực tiếp do các lỗi hay sai sót, nhưng lại làm ngăn trở khả năng của người lập trình để xây đựng một hệ thống cỡ lớn, có thể bảo trì và ổn định. Các điển hình bao gồm:
- Hệ thống rời rạc vì các câu lệnh định nghĩa nhập (
#include) dựa trên các dòng chữ nội tại rải rác không đồng nhất (trong các tập tin) nhằm giữ các nguyên mẫu và các định nghĩa được đồng bộ. Điều này làm tăng đáng kể số lần cho việc tạo dựng (phần mềm).
- Mô hình chuyển dịch rối rắm. Nó buộc phải có việc theo dõi các sự phụ thuộc (về mã) bằng tay và nó ngăn cấm sự
[tối ưu hóa trình dịch](/w/index.php?title=T%E1%BB%91i_%C6%B0u_h%C3%B3a_tr%C3%ACnh_d%E1%BB%8Bch&action=edit&redlink=1)giữa các mô dun (ngoại trừ sự [tối ưu hoá thời gian liên kết](/w/index.php?title=T%E1%BB%91i_%C6%B0u_ho%C3%A1_th%E1%BB%9Di_gian_li%C3%AAn_k%E1%BA%BFt&action=edit&redlink=1)).
- Hệ thống kiểu yếu dẫn tới việc các chương trình có lỗi hiển nhiên nhưng vẫn được dịch mà không bị bắt lỗi.
### Các công cụ kiểm tra tĩnh cho trình dịch[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=14) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=14)]
Nhiều công cụ đã được tạo ra để giúp người lập trình C tránh dược các lỗi. Việc kiểm tra và kiểm toán mã nguồn tự động thì rất hiệu quả trong mọi ngôn ngữ. Chẳng hạn cho C là
[Lint](/w/index.php?title=Lint&action=edit&redlink=1). Một thực tế là sử dụng Lint để phát hiện các mã có nghi vấn khi một chương trình được viết lần đầu. Một khi chương trình đã qua được Lint, thì nó được chuyển dịch bởi một trình dịch C. Cũng có một thư viện cho việc tiến hành kiểm tra các biên của mảng và một dạng giới hạn của việc [tự động dọn rác](/w/index.php?title=T%E1%BB%B1_%C4%91%E1%BB%99ng_d%E1%BB%8Dn_r%C3%A1c&action=edit&redlink=1), nhưng đó không phải là một phần tiêu chuẩn của C.
Điều nên nhận thức là các công cụ này không phải là vạn năng. Bởi vì sự linh hoạt của C, nhiều kiểu lỗi như là việc dùng sai các hàm tham lượng động, việc dùng chỉ số ngoài biên của mảng và quản lý bộ nhớ không đúng thì không thể phát hiện được. Mặc dù vậy, nhiều trường hợp (lỗi) thông thường đều có thể được nhận ra.
## Lịch sử[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=15) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=15)]
### Những phát triển ban đầu[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=16) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=16)]
Phát triển khởi đầu của C xảy ra ở
[AT&T](/wiki/AT%26T) [Bell Labs](/w/index.php?title=Bell_Labs&action=edit&redlink=1) giữa [1969](/wiki/1969) và [1973](/wiki/1973); theo Ritchie thì thời gian sáng tạo nhất là vào năm [1972](/wiki/1972). Nó được đặt tên là C vì nhiều đặc tính của nó rút ra từ một ngôn ngữ trước đó là [B](/w/index.php?title=B_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1).
Thêm vào đó, các điểm khác với ngôn ngữ nguyên thủy "B":
[Ken Thompson](/wiki/Ken_Thompson) kể tới ngôn ngữ lập trình [BCPL](/w/index.php?title=BCPL&action=edit&redlink=1), nhưng ông ta cũng đã tạo ra ngôn ngữ là [Bon](/w/index.php?title=Bon&action=edit&redlink=1) để vinh danh vợ mình.
Có nhiều truyền thuyết về nguồn gốc của C và hệ điều hành liên quan tới nó là
[Unix](/wiki/Unix) bao gồm:
- Sự phát triển của C là kết quả của các lập trình viên đã muốn chơi
[Space Travel](http://cm.bell-labs.com/cm/cs/who/dmr/spacetravel.html). Họ đã chơi nó trên [mainframe](/wiki/M%C3%A1y_t%C3%ADnh_l%E1%BB%9Bn)của hãng làm việc, nhưng bị thiếu khả năng (chạy) và phải hỗ trợ khoảng 100 người dùng, Thompson và Ritchie tìm thấy rằng họ đã không có đủ sự kiểm soát tàu vũ trụ (của trò chơi) để tránh được các va chạm khỏi sự chuyển dịch của các [thiên thạch](/wiki/Thi%C3%AAn_th%E1%BA%A1ch). Do đó, họ quyết định để xuất trò chơi này sang một máy [PDP-7](/w/index.php?title=PDP-7&action=edit&redlink=1)để không trong văn phòng. Nhưng nó lại không có [hệ điều hành](/wiki/H%E1%BB%87_%C4%91i%E1%BB%81u_h%C3%A0nh); do đó, họ viết một hệ điều hành. Tiếp tục, họ quyết định để xuất hệ điều hành này sang [PDP-11](/w/index.php?title=PDP-11&action=edit&redlink=1)của văn phòng nhưng việc này thật khó vì tất cả mã đều là ngôn ngữ [Assembly](/wiki/Ng%C3%B4n_ng%E1%BB%AF_Assembly). Họ quyết định dùng một ngôn ngữ dễ xuất cấp cao để hệ điều hành có thể xuất được dễ dàng từ máy tính này sang máy khác. Họ đã tìm đến ngôn ngữ B, nhưng nó lại thiếu các chức năng để khai thác một số khả năng của PDP-11. Vậy nên họ đã sáng tạo ra một ngôn ngữ mới là C.
- Unix nguyên đã được phát triển để tạo ra một hệ thống tự động lập hồ sơ cho các bằng phát minh. Phiên bản đầu tiên của Unix đã phát triển từ ngôn ngữ Assembly. Sau đó, ngôn ngữ C đã được phát triển để từ đó thay thế hệ điều hành mới.
Cho đến
[1973](/wiki/1973), C đã trở nên đủ mạnh để dùng viết [nhân](/w/index.php?title=Nh%C3%A2n_(h%E1%BB%87_%C4%91i%E1%BB%81u_h%C3%A0nh)&action=edit&redlink=1) cho Unix, thay vì trước nó chúng được viết bằng Assembly trong các máy [PDP-11/20](/w/index.php?title=PDP-11/20&action=edit&redlink=1). Đây là lần đầu tiên mà nhân của một hệ điều hành được lắp thành bằng một ngôn ngữ khác hơn Assembly.
### K&R C[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=17) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=17)]
Năm
[1978](/wiki/1978), Ritchie và [Brian Kernighan](/w/index.php?title=Brian_Kernighan&action=edit&redlink=1) xuất bản lần đầu cuốn *. Sách này được những người lập trình biết tới như là "K&R", được dùng trong nhiều năm như là một The C Programming Language* [đặc tả](/w/index.php?title=%C4%90%E1%BA%B7c_t%E1%BA%A3&action=edit&redlink=1)không chính thức của C. Phiên bản C mà cuốn sách đó đề cập thường được gọi là "K&R C". (Lần xuất bản thứ hai của cuốn này cũng bao gồm chuẩn [ANSI C](/w/index.php?title=ANSI_C&action=edit&redlink=1)).
K&R giới thiệu các chức năng sau đây:
- Kiểu dữ liệu
struct
- Kiểu dữ liệu
long int
- Kiểu dữ liệu
unsigned int
- Toán tử
=+đã được đổi thành
+=, và tương tự cho các toán tử khác để tránh gây hiểu nhầm cho
[bộ phân tích từ vựng](/w/index.php?title=B%E1%BB%99_ph%C3%A2n_t%C3%ADch_t%E1%BB%AB_v%E1%BB%B1ng&action=edit&redlink=1)của trình dịch C. (Ví dụ: sự giống nhau dễ lầm lẫn của hai câu lệnh
i =+ 10và
i = +10).
K&R C thường được xem là phần cơ bản nhất của ngôn ngữ mà nó cần phải có cho một trình dịch C. Trong nhiều năm, ngay cả sau khi ANSI C được giới thiệu, nó đã được xem như là "mẫu số chung nhỏ nhất" mà người lập trình C phải bám lấy nếu muốn có được khả năng dịch chuyển (tái dụng trên nhiều máy) bởi vì không phải mọi trình dịch đều hỗ trợ toàn bộ ANSI C, và một cách hợp lý là mã viết trong K&R C cũng là mã hợp lệ trong ANSI C.
Trong các phiên bản trước đây của C, chỉ có những hàm nào trả về một số khác số nguyên mới cần được khai báo trước khi dùng. Một hàm dùng mà không có bất kì sự khai báo nào trước đó được giả thiết là sẽ trả về một số nguyên.
Ví dụ việc gọi với yêu cầu của sự khai báo trước:
1 long int SomeFunction(); 2 3 int CallingFunction() 4 { 5 long int ret; 6 ret = SomeFunction(); 7 }
Ví dụ việc gọi mà không cần phải khai báo trước:
1 int CallingFunction() 2 { 3 int ret; 4 ret = SomeOtherFunction(); 5 } 6 7 int SomeOtherFunction() 8 { 9 return 0; 10 }
Bởi vì nguyên mẫu của K&R đã không bao gồm bất kì thông tin nào về các tham số của hàm, chức năng
[kiểm tra kiểu](/w/index.php?title=Ki%E1%BB%83m_tra_ki%E1%BB%83u&action=edit&redlink=1) của các đối số đã không được tiến hành, mặc dù một số trình dịch sẽ cho ra thông báo cảnh cáo nếu một hàm đã được gọi với số lượng tham số không đúng.
Trong nhiều năm tiếp theo của sự tái bản K&R C, nhiều chức năng "không chính thức" đã được thêm vào cho ngôn ngữ, được hỗ trợ bởi các trình dịch của AT&T và một số nơi khác. Trong đó bao gồm:
- Các hàm có kiểu
voidvà dữ liệu có kiểu
void *.
- Các hàm trả về các kiểu
structhay
union.
- Tên của các miền trong một không gian tên cho mỗi kiểu
struct.
[Phép gán](/w/index.php?title=Ph%C3%A9p_g%C3%A1n&action=edit&redlink=1)cho kiểu dữ liệu
struct.
- Hằng
constđược xem là đối tượng chỉ cho phép đọc.
- Một
[thư viện chuẩn](/wiki/Th%C6%B0_vi%E1%BB%87n_chu%E1%BA%A9n_C)được sự hợp tác để xây dựng bởi nhiều nhà sản xuất.
- Các kiểu
[enumeration](/w/index.php?title=Enumeration&action=edit&redlink=1).
- Kiểu chính xác đơn
float.
### ANSI C và ISO C[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=18) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=18)]
Vào khoảng cuối
[thập niên 1970](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1970), C bắt đầu thay thế vai trò của [BASIC](/wiki/BASIC) như là một ngôn ngữ lập trình cho [microcomputer](/w/index.php?title=Microcomputer&action=edit&redlink=1). Suốt [thập niên 1980](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1980) nó đã được chấp thuận dùng trong [IBM PC](/w/index.php?title=IBM_PC&action=edit&redlink=1), và sự phổ biến của nó bắt đầu tăng một cách lớn lao.
Trong cùng thời kỳ,
[Bjarne Stroustrup](/wiki/Bjarne_Stroustrup) và đồng nghiệp ở Bell Labs đã bắt tay cho thêm vào C các cấu trúc ngôn ngữ lập trình hướng đối tượng.
Ngôn ngữ họ tạo ra gọi là
[C++](/wiki/C%2B%2B) nay trở thành ngôn ngữ lập trình ứng dụng phổ biến nhất trên hệ điều hành [Microsoft Windows](/wiki/Microsoft_Windows); C vẫn còn rất phổ biến trong thế giới UNIX. Một ngôn ngữ khác cũng được phát triển trong khoảng thời gian này là [Objective-C](/w/index.php?title=Objective-C&action=edit&redlink=1), cũng là một mở rộng lập trình hướng đối tượng cho C. Dù không phổ biến như C++, nó được dùng để phát triển các ứng dụng [Cocoa](/w/index.php?title=Cocoa&action=edit&redlink=1) của [Mac OS X](/wiki/Mac_OS_X).
Trong
[1983](/wiki/1983), [Viện Tiêu chuẩn Quốc gia Hoa Kỳ](/wiki/ANSI) (ANSI) thành lập hội đồng X3J11 để hoàn tất một tiêu chuẩn dặc tả của C. Sau một quá trình khó khăn và lâu dài, tiêu chuẩn đã hoàn tất vào [1989](/wiki/1989) và được công nhận là "Programming Language C" ANSI X3.159-1989. Phiên bản ngôn ngữ này thường được nhắc đến như là [ANSI C](/w/index.php?title=ANSI_C&action=edit&redlink=1).
Trong
[1990](/wiki/1990), Tiêu chuẩn ANSI C (với một vài chi tiết nhỏ được điều chỉnh) đã được tiêu chuẩn hóa bởi [Tổ chức Quốc tế về Tiêu chuẩn hóa](/w/index.php?title=T%E1%BB%95_ch%E1%BB%A9c_Qu%E1%BB%91c_t%E1%BA%BF_v%E1%BB%81_Ti%C3%AAu_chu%E1%BA%A9n_h%C3%B3a&action=edit&redlink=1) (ISO) như là [ISO/IEC 9899:1990](/w/index.php?title=ISO_9899&action=edit&redlink=1).
Một điểm mạnh của quá trình tiêu chuẩn hoá ANSI C là làm cho K&R C trở thành một
[tập con](/wiki/T%E1%BA%ADp_h%E1%BB%A3p_con) của nó; nó tiếp nhận nhiều chức năng không chính thức của K&R C như là một hệ quả. Xa hơn, hội đồng tiêu chuẩn cũng làm cho ANSI C bao gồm thêm nhiều chức năng mới, như là các [nguyên mẫu của hàm](/w/index.php?title=Nguy%C3%AAn_m%E1%BA%ABu_c%E1%BB%A7a_h%C3%A0m&action=edit&redlink=1) (mượn từ C++), và khả năng tiền xử lý mạnh hơn.
Ngày nay, ANSI C được hỗ trợ bởi hầu hết các trình dịch. Hầu hết các mã C ngày nay được viết dựa ttrên ANSI C. Mọi chương trình
*chỉ* viết trong chuẩn C thì sẽ đảm bảo việc thực thi chính xác trên mọi nền nào cho phép dùng C. Mặc dù vậy, nhiều chương trình đã viết ra chỉ dịch được trong một số nền hoặc với một số trình dịch nào đó bởi vì các lý do sau:
- Dùng các thư viện không chuẩn, như là cho
[GUI](/wiki/Giao_di%E1%BB%87n_ng%C6%B0%E1%BB%9Di_d%C3%B9ng_%C4%91%E1%BB%93_h%E1%BB%8Da).
- Một số trình dịch không hoàn toàn theo đúng chuẩn ANSI C hay các chuẩn tiếp sau trong các chế độ làm việc mặc nhiên của chúng.
- Phụ thuộc vào kích thước của một số kiểu dữ liệu cũng như là
[endian](/w/index.php?title=Endian&action=edit&redlink=1)của nền. (Chẳng hạn, trong một số nền kích thước của kiểu
intcó thể nhiều hơn hay ít hơn—4, 8 hay 16 byte—trong nền khác.)
[Macro](/w/index.php?title=Macro&action=edit&redlink=1)
__STDC__ có thể được dùng để chẻ mã nguồn thành các phần theo ANSI C và K&R
1 #if __STDC__ 2 extern int getopt(int,char * const *,const char *); 3 #else 4 extern int getopt(); 5 #endif
Một số chuyên gia khuyên rằng dùng
#if __STDC__ như trên, thay cho
#ifdef __STDC__ bởi vì một số trình dịch cài giá trị
__STDC__ về 0 để chỉ việc không theo chuẩn ANSI (trong khi một số trình dịch khác lại cài về giá trị khác 0).
### C99[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=19) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=19)]
Sau quá trình chuẩn hóa ANSI, đặc tả của ngôn ngữ C tương đối được giữ nguyên trong một thời gian, trong khi
[C++](/wiki/C%2B%2B) tiếp tục thâm nhập. (Đúng ra, đã có tu chính số 1 tạo ra phiên bản mới của C trong [1995](/wiki/1995), nhưng phiên bản này hiếm khi được đồng thuận.) Cho đến cuối [thập niên 1990](/wiki/Th%E1%BA%ADp_ni%C3%AAn_1990) một tiêu chuẩn mới đã được phát hành là ISO 9899:1999. Tiêu chuẩn này thường được mệnh danh là "C99". Nó đã tiếp thu ANSI C trong tháng 3 năm [2000](/wiki/2000).
Những chức năng mới trong C99 bao gồm:
- Các hàm
.
[inline](/w/index.php?title=Inline&action=edit&redlink=1)
- Các biến có thể được khai báo ở bất kì chỗ nào (như là trong C++).
- Nhiều kiểu dữ liệu mới được đưa vào bao gồm kiểu
long long int(để giảm khó khăn trong việc chuyển hệ từ
[32-bit](/wiki/32-bit)sang [64-bit](/wiki/64-bit)), kiểu [boolean](/w/index.php?title=Boolean_(ki%E1%BB%83u_d%E1%BB%AF_li%E1%BB%87u)&action=edit&redlink=1)và kiểu
complexđể dùng cho các số phức.
- Các mảng có chiều dài thay đổi được.
- Hỗ trợ cho dòng lệnh chú giải bắt đầu với
//như trong C++ và nhiều ngôn ngữ khác.
- Nhiều hàm thư viện mới như là
snprintf().
- Nhiều
[tập tin tiêu dề](/w/index.php?title=T%E1%BA%ADp_tin_ti%C3%AAu_d%E1%BB%81&action=edit&redlink=1)như là
stdint.h.
Điều thú vị trong việc hỗ trợ cho chuẩn C99 là một kết quả pha trộn. Trong khi
[GCC](/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU) và nhiều trình dịch khác hiện hỗ trợ hầu hết các chức năng của C99, thì trình dịch của [Microsoft](/wiki/Microsoft) và [Borland](/w/index.php?title=Borland&action=edit&redlink=1) lại không tuân theo và hai công ty này dường như không thích thú để thêm vào các hỗ trợ này.
## Quan hệ với C++[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=20) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=20)] [C++](/wiki/C%2B%2B)nguyên là sự kết thừa từ C. Mặc dù vậy, không phải mọi chương trình trong C đều hợp lệ trong C++. Vì là hai ngôn ngữ độc lập, số lượng không tương thích giữa hai ngôn ngữ này đã tăng lên. [[2]](http://david.tribble.com/text/cdiffs.htm). Phiên bản cuối cùng C99 đã tạo ra thêm nhiều tính năng xung đột (giữa C và C++). Các sự khác nhau này tạo ra khó khăn để viết các chương trình và thư viện đẻ có thể được dịch và hoạt động chính xác trong cả hai loại mã C hay C++, đồng thời gây nhầm lẫn cho những người lập trình dùng cả hai ngôn ngữ này. Sự chênh lệch này cũng gây khó khăn cho ngôn ngữ này có thể tiếp thu các tính năng của ngôn ngữ kia. [Bjarne Stroustrup](/wiki/Bjarne_Stroustrup), cha đẻ của C++ đã lập đi lập lại rằng [[3]](http://www.research.att.com/~bs/sibling_rivalry.pdf): Các tính chất không tương thích giữa C và C++ nên được hạ thấp càng nhiều càng tốt để mở rộng tối đa khả năng hoạt động thông suốt của hai ngôn ngữ này. Một số người tranh biện rằng vì C và C++ là hai ngôn ngữ khác nhau, sự tương thích giữ chúng thì hữu ích nhưng không phải có tính sống còn, theo lập trường này, nỗ lực để giảm sự không tương thích không được phá hủy cố gắng để nâng cao mỗi ngôn ngữ đứng riêng.
Ngày nay, những khác nhau căn bản, không kể các mở rộng thêm vào của C++ như là các lớp, các tiêu bản, các không gian tên, và quá tải, giữa hai ngôn ngữ là:
— các
**inline** [hàm inline](/wiki/H%C3%A0m_n%E1%BB%99i_tuy%E1%BA%BFn)có giá trị toàn cục trong C++ và chỉ có giá trị trong phạm vi tập tin trong C.
- Từ khóa
trong C99 thì có riêng tập tin tiêu dề của nó là
**bool**
. Các chuẩn C trước đây đã không định nghĩa kiểu
**<stdbool.h>**
booleanvà nhiều phương pháp không tương thích đã được dùng để mô phỏng kiểu boolean.
- Các hằng ký tự (được đặt trong dấu
') có độ lớn của một
inttrong C và có độ lớn của một
chartrong C++. Mặc dù vậy, ngay cả trong C các hàng này sẽ không bao giờ vượt quá giá trị của một
char, cho nên việc chuyển đổi kiểu
(char)'a'thì hoàn toàn an toàn.
- Nhừng từ khóa mới thêm vào trong C++ sẽ không thể dược dùng làm các tên trong C như trước đây nữa. (Ví dụ:
try,
catch,
template,
new,
delete,...).
- Trong C++, trình dịch tự động tạo một "thẻ" cho mỗi
struct,
unionhay
enum, do vậy,
struct S {};trong C++ tương đương với
typedef struct S {} S;trong C.
C99 tiếp thu một số tính năng mà xuất hiện đầu tiên trong C++. Trong số đó là:
- Bắt cuộc khai báo nguyên mẫu của hàm.
- Thêm từ khóa
.
**inline**
- Hủy bỏ "hiểu ngầm" của sự trả về sẽ có kiểu int.
## Ngôn ngữ trung gian[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=21) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=21)]
C được dùng như là một
[ngôn ngữ trung gian](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_trung_gian&action=edit&redlink=1) vì nó có thể xuất thành dạng [tập tin object](/w/index.php?title=T%E1%BA%ADp_tin_object&action=edit&redlink=1) hay [ngôn ngữ máy](/wiki/Ng%C3%B4n_ng%E1%BB%AF_m%C3%A1y). Việc này giúp C trở nên dễ vận chuyển hay dễ [tối ưu hóa](/w/index.php?title=T%E1%BB%91i_%C6%B0u_h%C3%B3a_(l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1). Các trình dịch C thường có sẵn cho nhiều loại CPU và các hệ điều hành và hầu hết những trình dịch đó cho ra được tập tin *.obj cũng như ngôn ngữ máy có tối ưu hóa. Do đó, các đầu ra của mã nguồn C đột nhiên trở nên rất là dễ vận chuyển, và có khả năng dùng trong dạng *.obj hay mã máy được tối ưu hóa. Dầu sao thì C được thiết kế như là một ngôn ngữ lập trình, nó không phải là lý tưởng cho việc dùng như là một ngôn ngữ trung gian. Điều này dẫn tới việc phát triển các ngôn ngữ trung gian lấy C làm cơ sở, như là một [C--](/w/index.php?title=C--&action=edit&redlink=1).
## Các trình dịch quan trọng[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=22) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=22)]
Những trình dịch về C ngày nay thương được cung cấp kèm chung với C++ và ngay cả trình dịch cho ngôn ngữ
[Assembly](/wiki/Ng%C3%B4n_ng%E1%BB%AF_Assembly). Những sản phẩm trình dịch được bán phổ biến trên thị trường cũng thường cung cấp thêm nhiều công cụ trợ giúp cho người lập trình như là [IDE](/wiki/M%C3%B4i_tr%C6%B0%E1%BB%9Dng_ph%C3%A1t_tri%E1%BB%83n_t%C3%ADch_h%E1%BB%A3p), [debugger](/w/index.php?title=Debugger&action=edit&redlink=1),...
Sau đây là danh sách một số trình dịch phổ biến:
[GCC](/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU)trình dịch hoàn toàn miễn phí của theo giấy phép [GNU](/wiki/D%E1%BB%B1_%C3%A1n_GNU)toàn bộ gói sẽ bao gồm trình dịch của nhiều ngôn ngữ điển hình là C/C++ và [Fortran](/wiki/Fortran). Đây là trình dịch chính dùng cho các hệ diều hành [Linux](/wiki/Linux). Nó hỗ trợ hầu hết các tiêu chuẩn C/C++. Tuy nhiên vì là miễn phí nên nó không cung cấp các phương tiện đồ họa hỗ trợ cho việc sửa lỗi và viết mã mặc dù nó cũng có các công cụ để giúp phát hiện lỗi rất mạnh như [gdb](/w/index.php?title=Gdb&action=edit&redlink=1). [Borland C/C++](/w/index.php?title=Borland_C/C%2B%2B&action=edit&redlink=1), trình dịch này ngày nay đã đổi tên thành [Borland Builder](/w/index.php?title=Borland_Builder&action=edit&redlink=1)và bị giảm sút thị phần rất nhiều nhưng đây là trình dịch có hỗ trợ chuẩn C98. [Microsoft C/C++](/w/index.php?title=Microsoft_C/C%2B%2B&action=edit&redlink=1), đây là trình dịch chỉ được dùng chủ yếu để phát triển tcác phần mềm trên các hệ [Windows](/wiki/Microsoft_Windows). Trình dịch này rất mạnh về các hỗ trợ đồ họa cũng như các công cụ để phát triển và sản xuất phần mềm. Rất tiếc, trình dịch này không hoàn toàn tương thích với các chuẩn. Để có mã nguồn theo chuẩn thì người lập trình phải cài đặt lại một số thông số mặc định. Một điểm yếu của trình dịch này là nó không hỗ trợ cho các hệ điều hành nào không do Microsoft sản xuất.
- Ngoài ra, còn rất nhiều trình dịch khác ở mức độ ít phổ biến hơn như là trình dịch C/C++ của
[Intel](/wiki/Intel), [Bell Labs](/w/index.php?title=Bell_Labs&action=edit&redlink=1),...
## Xem thêm[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=23) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=23)]
### Tiếng Việt[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=24) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=24)]
### Tiếng Anh[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=25) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=25)]
|
|![]()
|
|[en:C preprocessor](https://en.wikipedia.org/wiki/C_preprocessor) [en:C standard library](https://en.wikipedia.org/wiki/C_standard_library) [en:C library](https://en.wikipedia.org/wiki/C_library) [en:C string](https://en.wikipedia.org/wiki/C_string) [en:C syntax](https://en.wikipedia.org/wiki/C_syntax) [en:List of articles with C programs](https://en.wikipedia.org/wiki/List_of_articles_with_C_programs) [en:Objective-C](https://en.wikipedia.org/wiki/Objective-C) [Operators in C and C++](https://en.wikipedia.org/wiki/Operators_in_C_and_C_Plus_Plus) [en:Programming tool](https://en.wikipedia.org/wiki/Programming_tool): [Cygwin](/wiki/Cygwin), [Dev-C/C++](/w/index.php?title=Dev-C/C%2B%2B&action=edit&redlink=1), [DJGPP](/w/index.php?title=DJGPP&action=edit&redlink=1), [GNU Compiler Collection](/w/index.php?title=GNU_Compiler_Collection&action=edit&redlink=1), [LCC](/w/index.php?title=Little_C_compiler&action=edit&redlink=1), [Linker](/w/index.php?title=Linker&action=edit&redlink=1), [make](/w/index.php?title=Make&action=edit&redlink=1), [SPlint](/w/index.php?title=SPlint&action=edit&redlink=1), [Small-C](/w/index.php?title=Small-C&action=edit&redlink=1), [C--](/w/index.php?title=C--&action=edit&redlink=1), [C++](/wiki/C%2B%2B)
## Tham khảo[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=26) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=26)] [Brian Kernighan](/w/index.php?title=Brian_Kernighan&action=edit&redlink=1), [Dennis Ritchie](/wiki/Dennis_Ritchie): *The C Programming Language*. Also known as K&R — The original book on C.
- 1st, Prentice Hall 1978;
[ISBN 0-13-110163-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131101633). Pre-ANSI C.
- 2nd, Prentice Hall 1988;
[ISBN 0-13-110362-8](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131103628). ANSI C.
- 1st, Prentice Hall 1978;
[ISO/IEC 9899](http://www.open-std.org/JTC1/SC22/WG14/www/standards). The official C:1999 standard, along with defect reports and a rationale. [Samuel P. Harbison](/w/index.php?title=Samuel_P._Harbison&action=edit&redlink=1), [Guy L. Steele](/w/index.php?title=Guy_L._Steele&action=edit&redlink=1): *C: A Reference Manual*. This book is excellent as a definitive reference manual, and for those working on C compilers. The book contains a [BNF](/w/index.php?title=Backus-Naur_form&action=edit&redlink=1)grammar for C.
- 4th, Prentice Hall 1994;
[ISBN 0-13-326224-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0133262243).
- 5th, Prentice Hall 2002;
[ISBN 0-13-089592-X](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/013089592X).
- 4th, Prentice Hall 1994;
[Derek M. Jones](/w/index.php?title=Derek_M._Jones&action=edit&redlink=1): *The New C Standard: A Cultural and Economic Commentary*, Addison-Wesley, [ISBN 0-201-70917-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201709171), [online material](http://www.knosof.co.uk/cbook/cbook.html) [Robert Sedgewick](/w/index.php?title=Robert_Sedgewick&action=edit&redlink=1): *Algorithms in C*, Addison-Wesley, [ISBN 0-201-31452-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201314525)(Part 1–4) and [ISBN 0-201-31663-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201316633)(Part 5)
- William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery: Numerical Recipes in C (The Art of Scientific Computing),
[ISBN 0-521-43108-5](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0521431085)
## Liên kết ngoài[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=27) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=27)]
### C[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=28) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=28)] *Lập trình C Trung tâm Tin Học Đại Học KHTN* *comp.lang.c Frequently Asked Questions* [by](http://cm.bell-labs.com/cm/cs/who/dmr/chist.html) *The Development of the C Language* [Dennis M. Ritchie](/w/index.php?title=Dennis_M._Ritchie&action=edit&redlink=1) [Programming in C](http://www.lysator.liu.se/c/)(Tài liệu thu thập từ Lysator) [International Obfuscated C Code Contest](http://www.ioccc.org) [ở](http://en.wikibooks.org/wiki/Programming:C) *Programming C* [Wikibooks](/wiki/Wikibooks) [— sách không xuất bản về "Phân tích chi tiết của tiêu chuẩn quốc tế cho ngôn ngữ C"](http://homepage.ntlworld.com/dmjones/cbook1_0a.pdf) *The New C Standard: An economic and cultural commentary*
### C99[
[sửa](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&veaction=edit§ion=29) | [sửa mã nguồn](/w/index.php?title=C_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)&action=edit§ion=29)] [Open source development using C99 — Is your C code up to standard?](http://www-106.ibm.com/developerworks/linux/library/l-c99.html?ca=dgr-lnxw07UsingC99)by [Peter Seebach](/w/index.php?title=Peter_Seebach&action=edit&redlink=1) [Are you Ready For C99?](http://www.kuro5hin.org/?op=displaystory;sid=2001/2/23/194544/139)
- Article "
[Incompatibilities Between ISO C and ISO C++](http://david.tribble.com/text/cdiffs.htm)" by [David R. Tribble](/w/index.php?title=David_R._Tribble&action=edit&redlink=1)
|
|

P3P: CP="This is not a P3P policy! See https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:CentralAutoLogin/P3P for more info."

X-Cache-Status: miss

Set-Cookie: GeoIP=US:VA:Ashburn:39.05:-77.47:v4; Path=/; secure; Domain=.wikipedia.org

X-Cache: cp1066 miss, cp1065 miss

X-Content-Type-Options: nosniff

Via: 1.1 varnish-v4, 1.1 varnish-v4

Accept-Ranges: bytes

Cache-Control: private, s-maxage=0, max-age=0, must-revalidate

Vary: Accept-Encoding,Cookie,Authorization

Content-Language: vi

Link: </static/images/project-logos/viwiki.png>;rel=preload;as=image;media=not all and (min-resolution: 1.5dppx),</static/images/project-logos/viwiki-1.5x.png>;rel=preload;as=image;media=(min-resolution: 1.5dppx) and (max-resolution: 1.999999dppx),</static/images/project-logos/viwiki-2x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)


markdown:
# Thanh Ninh
|Thanh Ninh|
|
|**Tọa độ**: [21°25′12″B 106°0′12″Đ / 21,42°B 106,00333°Đ](//tools.wmflabs.org/geohack/geohack.php?language=vi&pagename=Thanh_Ninh¶ms=21_25_12_N_106_0_12_E_region:VN_type:adm3rd) [Tọa độ](/wiki/H%E1%BB%87_t%E1%BB%8Da_%C4%91%E1%BB%99_%C4%91%E1%BB%8Ba_l%C3%BD): [21°25′12″B 106°0′12″Đ / 21,42°B 106,00333°Đ](//tools.wmflabs.org/geohack/geohack.php?language=vi&pagename=Thanh_Ninh¶ms=21_25_12_N_106_0_12_E_region:VN_type:adm3rd) [[1]](#cite_note-MS-1) [[1]](#cite_note-MS-1)
|Vị trí Thanh Ninh trên bản đồ Việt Nam|
|
| ![ Cộng hòa xã hội chủ nghĩa Việt Nam](//upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Vietnam.svg/22px-Flag_of_Vietnam.svg.png)
![ Cộng hòa xã hội chủ nghĩa Việt Nam](http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Vietnam.svg/22px-Flag_of_Vietnam.svg.png)
[Việt Nam](/wiki/Vi%E1%BB%87t_Nam) [Thái Nguyên](/wiki/Th%C3%A1i_Nguy%C3%AAn) [Phú Bình](/wiki/Ph%C3%BA_B%C3%ACnh) [[1]](#cite_note-MS-1) **Thanh Ninh** là một [xã](/wiki/X%C3%A3_(Vi%E1%BB%87t_Nam)) thuộc [huyện](/wiki/Huy%E1%BB%87n_(Vi%E1%BB%87t_Nam)) [Phú Bình](/wiki/Ph%C3%BA_B%C3%ACnh), [tỉnh](/wiki/T%E1%BB%89nh_(Vi%E1%BB%87t_Nam)) [Thái Nguyên](/wiki/Th%C3%A1i_Nguy%C3%AAn), [Việt Nam](/wiki/Vi%E1%BB%87t_Nam).
Xã có diện tích 5,02 km², dân số năm 1999 là 5054 người,
mật độ dân số đạt 1007 người/km². [1]
Theo Niên giám thống kê tỉnh Thái Nguyên 1999 - 2003, xã Thanh Ninh có diện tích 4,95 km², dân số là 5119 người, mật độ dân số đạt 1033 người/km². Thanh Ninh bao gồm 14 xóm là Nam Hương 1, Nam Hương 2, Nam Hương 3, Đồng Phú Vân Đình, Tiền Phong, Quán, Đồng Trong, Phú Yên, Hòa Bình 1, Hòa Bình 2, Phú Thánh, Phú Thanh 2, Đồi Thông.
[[2]](#cite_note-2)
Xã nằm ở phía đông nam của huyện và có tuyến tỉnh lộ 294 chạy qua địa bàn theo chiều đông-tây.
Thanh Ninh tiếp giáp với xã Lương Phú ở phía bắc, xã Dương Thanh ở phía đông, xã
[Việt Ngọc](/wiki/Vi%E1%BB%87t_Ng%E1%BB%8Dc) thuộc huyện [Tân Yên](/wiki/T%C3%A2n_Y%C3%AAn) và hai xã [Hoàng Lương](/wiki/Ho%C3%A0ng_L%C6%B0%C6%A1ng) và [Hoàng Thanh](/wiki/Duy_Kh%C3%A1nh) thuộc huyện [Hiệp Hòa](/wiki/Hi%E1%BB%87p_H%C3%B2a_(huy%E1%BB%87n)) của tỉnh [Bắc Giang](/wiki/B%E1%BA%AFc_Giang) ở phía nam, giáp với xã Kha Sơn ở phía nam.
Thanh Ninh có diện tích 389,5ha đất nông nghiệp, sản lượng lương thực hằng năm của xã luôn đạt trên 2 nghìn tấn. Tuy nhiên, hơn 5 nghìn người của xã vẫn đang canh tác trên 9,962 thửa ruộng khác nhau, trung bình mỗi hộ có từ 5 đến 7 thửa.
Trên địa bàn xã cũng trồng loại ớt Hiểm Lai với năng suất bình quân mỗi ha ớt đạt khoảng 84 tạ/năm.Năm 2010, tổng diện tích đất trồng ớt của xã đạt khoảng 16 - 17ha. Rác thải sinh hoạt ở xã Thanh Ninh không được xử lý hợp vệ sinh và rác thải bị vứt bừa bãi. [3] [[4]](#cite_note-4)
## Chú thích[
[sửa](/w/index.php?title=Thanh_Ninh&veaction=edit§ion=1) | [sửa mã nguồn](/w/index.php?title=Thanh_Ninh&action=edit§ion=1)]
- ^
**a** **ă** **â** **b** [“Mã số đơn vị hành chính Việt Nam”](http://mic.gov.vn/uploads/20100623/E124-2009%20(31-12)2-MSDVHCVN.xls). Bộ Thông tin & Truyền thông. Truy cập ngày 10 tháng 4 năm 2012. [^](#cite_ref-2) [“Địa chí Thái Nguyên -Huyện Phú Bình”](http://www.thainguyen.gov.vn/wps/wcm/connect/7ef45f80413a284eacdfbd8cc17b9ecc/6_HuyenPhuBinh.pdf?MOD=AJPERES&CACHEID=7ef45f80413a284eacdfbd8cc17b9ecc)(PDF). Cổng thông tin điện tử tỉnh Thái Nguyên. Truy cập ngày 10 tháng 12 năm 2011. [^](#cite_ref-3) [Rào cản trong phát triển nông nghiệp hàng hóa](http://baothainguyen.vn/tin-tuc/dua-nghi-quyet-dai-hoi-dang-bo-tinh-lan-thu-xviii-vao-cuoc-song/rao-can-trong-phat-trien-nong-nghiep-hang-hoa-57853-198.html) [^](#cite_ref-4) [Cần nâng cao ý thức bảo vệ môi trường cho người dân](http://www.baothainguyen.org.vn/tin-tuc/DUA-NGHI-QUYET-DH-DANG-BO-TINH-LAN-THU-XVIII-VAO-CUOC-SONG/Can-nang-cao-y-thuc-bao-ve-moi-truong-cho-nguoi-dan-21011-198.html)
## Tham khảo[
[sửa](/w/index.php?title=Thanh_Ninh&veaction=edit§ion=2) | [sửa mã nguồn](/w/index.php?title=Thanh_Ninh&action=edit§ion=2)]
|
|

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Truncated: length

WARC-Identified-Payload-Type: text/html

Content-Type: text/html; charset=UTF-8

X-Cache: cp1068 miss, cp1065 miss

Connection: close

X-UA-Compatible: IE=Edge


markdown:
[BRUNEI – DUBAI – ABU DHABI](https://viettransport.com.vn/tours/brunei-dubai-abu-dhabi/)
Brunei : có một vẻ đẹp duyên dáng hiền hòa nhưng không kém
Mỗi người
[Đà Nẵng – Bà Nà – Hội An – Huế 4N3D](https://viettransport.com.vn/tours/da-nang-ba-na-hoi-an-hue-4n3d/)
Đà Nẵng - Bà Nà - Hội An - Huế Đến thăm thành
Mỗi người
[KOHRONG SALOEM T9](https://viettransport.com.vn/tours/kohrong-saloem-t9/)
Vương quốc Campuchia là một trong những địa điểm du lịch mới và
Mỗi người
[Mỹ Tho – Bến Tre – Cần Thơ](https://viettransport.com.vn/tours/my-tho-ben-tre-can-tho/)
Mỹ Tho- Bến Tre - Cần Thơ Ngã ba sông Hậu và sông
Mỗi người
[Phú Quốc](https://viettransport.com.vn/tours/phu-quoc/)
Nam Đảo- Bắc Đảo- Vinpearl và Safari Với nước biển trong vắt, những
Mỗi người
[Tour Du Thuyền Cần Thơ](https://viettransport.com.vn/san-pham/tour-du-thuyen-can-tho/)
NHÀ HÀNG DU THUYỀN CẦN THƠ CÓ SỨC CHỨA 600 KHÁCH HÀNG Thời khởi
Mỗi người

Server: LiteSpeed

Vary: Accept-Encoding


markdown:
![ income88](/Anh/Banner/income88_nhan_thuong.jpg)
-
-
Vui Sử dụng tính năng up bài viết thay cho những cmt spam và post trùng lặp vô nghĩa.
Vì 1 diễn đàn chất lượng Khách click chọn "báo cáo" khi gặp bài viết vi phạm để BQT xử lý nhé.
-
Chào mừng Khách đã đến Vnraovat.Net ! Xin đừng SPAM hãy nghĩ đến chất lượng.
[Nội dung trùng lặp + spam chèn link out trong cmt + Post sai box =Xóa tài khoản+ Tất cả bài viết](/rao-vat/noi-quy-dang-bai-tren-dien-dan-rao-vat-vnraovat-net.143/)
# Cần thanh lý amply Arirang SPA 909 mới 99%
Thảo luận trong '
[Thiết bị Âm Thanh - Audio](dang-tin/thiet-bi-am-thanh-audio.203/)' bắt đầu bởi [Trung Nguyễn](members/trung-nguyen.23759/), [13 Tháng hai 2018 lúc 7:05 PM](rao-vat/can-thanh-ly-amply-arirang-spa-909-moi-99.124443/).
-
### Khu vực:Tp. Hồ Chí Minh
-
### Tình trạng:Như mới
-
### Giá bán :2,900,000 VNĐ
-
### Số điện thoại:0932175741
-
### Địa Chỉ:71 Đường số 16, cư xá Lữ gia, Quận 11 (
[Bản đồ](https://maps.google.com/?q=71 Đường số 16, cư xá Lữ gia, Quận 11))
-
### Thông Tin:13 Tháng hai 2018 lúc 7:05 PM, 0 Trả lời, 752 Đọc

Server: Nginx-VPSSIM

X-Frame-Options: SAMEORIGIN

X-Xss-Protection: 1; mode=block

Set-Cookie: xf_session=6b58bb77d1b6e57c82ee198c44244158; path=/; secure; httponly

Cache-control: private, max-age=0


markdown:
**(VTC News) - Đang dừng chờ đèn đỏ, ba chiếc xe hơi đã bị 1 chiếc xe ben chở đất tông thẳng, nhiều người trên xe hốt hoảng la hét.**
Vụ việc xảy ra vào khoảng 16h30 ngày 12/10 trên đường Xa lộ Hà Nội, thuộc phường An Phú, quận 2, TPHCM.
![ Chiếc xe ben gây tai nạn. ](https://image.vtc.vn/files/f2/2015/10/12/xe-ben-tong-lien-tiep-3-xe-hoi-dung-den-do-xa-lo-ha-noi-un-u-hang-gio-0.jpg)
Chiếc xe ben gây tai nạn.
Thông tin ban đầu, thời điểm trên một xe ben chở bùn đất BKS 49C – 008.37 do tài xế tên Nguyên ngụ Vũng Tàu điều khiển hướng từ Cầu Sài Gòn về ngã tư Thủ Đức.
![ Chiếc xe hơi bị tông móp đuôi. ](https://image.vtc.vn/files/f2/2015/10/12/xe-ben-tong-lien-tiep-3-xe-hoi-dung-den-do-xa-lo-ha-noi-un-u-hang-gio-1.jpg)
Chiếc xe hơi bị tông móp đuôi.
Khi xe đi đến điểm quay đầu gần nút giao thông Cát Lái, bất ngờ một chiếc ô tô BKS 51A – 350.21 do tài xế Tùng (27 tuổi, ngụ quận 7) đi phía trước bất ngờ dừng đèn đỏ.
Lúc này, tài xế Nguyên do không xử lý kịp đã tông vào đuôi chiếc ô tô. Chưa dừng lại ở đó, chiếc xe ben tiếp tục loạng choạng qua bên trái và đâm vào 2 chiếc xe ô tô 4 chỗ đang chờ đèn đỏ để quay đầu mới chịu dừng lại.
![ Hai chiếc xe hơi dính chặt vào nhau ](https://image.vtc.vn/files/f2/2015/10/12/xe-ben-tong-lien-tiep-3-xe-hoi-dung-den-do-xa-lo-ha-noi-un-u-hang-gio-2.jpg)
Hai chiếc xe hơi dính chặt vào nhau
Tại hiện trường, chiếc xe ben bị hư hỏng nhẹ phần đầu. Trong khi đó, 1 chiếc xe 4 chỗ bị tông mạnh nên đã hư hỏng nặng phần đuôi xe, 2 chiếc còn lại thì hư hỏng nhẹ dính chặt vào nhau.
![ Hàng ngàn phương tiện di chuyển khó khăn.](https://image.vtc.vn/files/f2/2015/10/12/xe-ben-tong-lien-tiep-3-xe-hoi-dung-den-do-xa-lo-ha-noi-un-u-hang-gio-3.jpg)
Hàng ngàn phương tiện di chuyển khó khăn.
Nhận được tin báo, lực lượng CSGT quận 2 đã có mặt tại hiện trường, điều tra xử lý vụ tai nạn.
Vụ tai nạn xảy ra đúng vào giờ cao điểm buổi chiều khiến giao thông qua khu vực này ùn ứ hàng tiếng đồng hồ. Đến 18h cùng ngày, hiện trường vụ tai nạn vẫn chưa được lực lượng chức năng giải quyết xong.
*Video xe ben lao vào nhà dân 2 người chết* **Lê Trai**

Server: nginx

Content-Type: text/html; charset=utf-8

Pragma: no-cache

Cache-Control: public

X-Fastcgi-Cache: MISS


markdown:
![ line](/images/line.jpg)
**Nhà sản xuất**» Han-A Tools
Mã hàng : TEP-115-3518
|
|![]()
|
|
Website thiết bị uy tín
Luôn cam kết hàng chính hãng
|
|![]()
|
|
Giao hàng toàn quốc
Tư vấn nhiệt tình, Bảo hàng chính hãng
|
|![]()
|
|
Đa dạng sản phẩm
Với hơn 15.000 sản phẩm đủ chủng loại

WARC-Identified-Payload-Type: application/xhtml+xml

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Vary: Accept-Encoding,User-Agent

Content-Type: text/html


markdown:
Thêm bài hát này vào danh sách Playlist
- Hiện chưa có lời bài hát nào cho Yêu do ca sĩ Đình Nguyên trình bày. Bạn có thể click vào đây để đăng lời cho bài hát này.
MIN
Anh Khang
Nguyễn Thu Thủy
Lê Minh Trung
Khắc Việt
xem thêm
rút gọn
Top 100 bài hát
Top 100 Nhạc Latin Hay Nhất
Top 100 Nhạc Hàn Hay Nhất
Top 100 Nhạc Trữ Tình Hay Nhất
Top 100 Nhạc Trẻ Hay Nhất
Top 100 Remix Việt Hay Nhất
Đơn vị chủ quản: Công ty Cổ phần NCT
Địa chỉ: Tòa nhà HAGL Safomec, 7/1 Thành Thái, P14, Q10, TP.HCM
Người chịu trách nhiệm nội dung: Ông Nhan Thế Luân - Email: support@nct.vn - Tel: (028) 3868 7979
Giấy phép MXH số 499/GP-BTTTT do Bộ Thông Tin và Truyền thông cấp ngày 28/09/2015
## Bình luận

P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'

Vary: Accept-Encoding, User-Agent


markdown:
Tin Luật sư Lê Công Định được trả tự do cũng được người nhà của ông Định xác nhận với đài chúng tôi. Từ thành phố Hồ Chí Minh, một thân nhân của Luật sư Lê Công Định xác nhận:
*"Vâng. Chính xác đó. Bên tòa đại sứ với bên bộ nội vụ, bên công an nói
chuyện với Định. Hiện chưa biết chính xác ngày nào nhưng theo tôi thì chắc gần đó, chứ không xa đâu, nhưng mà
không biết ngày nào."*
Theo các thông tin mà Ban Việt Ngữ Đài Á Châu Tự Do có được, Luật sư Lê Công Định là 1 trong 3 trường hợp được phía Hoa Kỳ nêu ra với đại diện Việt Nam trong cuộc đối thoại thường niên về nhân quyền tại Washington hồi tháng trước. Hai trường hợp còn lại là Blogger Điếu Cày và Linh mục Nguyễn Văn Lý.
Luật sư Lê Công Định 43 tuổi, bị tòa án sơ thẩm tại thành phố Hồ Chí Minh hôm 20 tháng 1 năm 2010 tuyên án 5 năm tù giam về tội “hoạt động nhằm lật đổ chính quyền nhân dân”.
Sau đó vào ngày 11 tháng 5 năm 2010, tòa phúc thẩm Tòa án Nhân dân tối cao tiếp tục bác kháng cáo của Luật sư Lê Công Định và giữ nguyên mức án 5 năm tù giam.
Cùng bị kết tội trong vụ án “âm mưu lật đổ chính quyền” với Luật sư Lê Công Định còn có các ông Trần Huỳnh Duy Thức và Lê Thăng Long.
Chúng tôi sẽ tiếp tục cập nhật thêm chi tiết và loan tải đến quý khán thính
giả trong thời gian ngắn nhất, tại trang web:
[http://www.RFATiengViet.Net](http://www.rfatiengviet.net/)

Server: Zope/(2.13.23, python 2.7.6, linux2) ZServer/1.1

Via: 1.1 localhost (squid/3.5.12)

X-Cache-Lookup: MISS from localhost:8100


markdown:
No media source currently available
Tin tức mới nhất và các chuyên mục đặc biệt về Việt Nam và Thế giới

X-UA-Compatible: IE=edge

Cache-Control: public, max-age=286


markdown:
[](/a/4237904.html)
Các nhà lãnh đạo chính phủ lâm thời Libya đã gặp Bộ trưởng Ngoại giao Ý Franco Frattini trong chuyến thăm Libya đầu tiên của ông này kể từ khi chế độ Moammar Gadhafi sụp đổ.
Ông Frattini đến Libya, một cựu thuộc địa Ý, hôm thứ Sáu nhằm củng cố quan hệ với Hội đồng Chuyển tiếp Quốc gia NTC.
Thông tấn xã AP nói ông Frattini đã loan báo giải tỏa hơn 3 tỉ đô la tài sản của Libya cho những dự án giúp tái thiết nước này.
Hôm thứ Năm, NTC nhận được sự ủng hộ của cả 4 nhà lập pháp Mỹ đến thăm Tripoli. Trong một diễn biến khác, Hội đồng Nhân quyền Liên Hiệp Quốc khuyến cáo giữ lại tư cách thành viên của Libya tại hội đồng.
Trong khi đó, những chiến binh của NTC đang nỗ lực giành quyền kiểm soát tại một số căn cứ còn lại vẫn còn nằm trong tay những phần tử trung thành với ông Gadhafi.
Hôm thứ Năm, những chiến binh này nói đã kiểm soát được phi trường thành phố Sirte, quê hương của ông Gadhafi.
NTC cũng đang cố gắng làm chủ thị trấn Bani Walid.

Cache-Control: public, max-age=283


markdown:
Đường dẫn truy cập
Tới nội dung chính
Tới điều hướng chính
Đi tới "Tìm"
Ngôn ngữ khác
Tìm
Tìm
Nghe
Xem
Trang chủ
Việt Nam
Hoa Kỳ
Biển Đông
Thế giới
Blog
Diễn đàn
Mục
Đời sống
Kinh tế
Khoa học
Sức khoẻ
Văn hoá
Thể thao
Giáo dục
Chuyên đề
APEC Việt Nam 2017
Trịnh Vĩnh Bình vs. Chính phủ Việt Nam
Vụ Trịnh Xuân Thanh
Ngư Dân Việt và Làn Sóng Trộm Hải Sâm
Bên Kia Quốc Lộ: Tiếng Vọng Từ Nông Thôn Mỹ
Thượng đỉnh Mỹ-Việt 2017
30/4: Ngày ấy - Bây giờ
Trump - 100 Ngày Đầu
VOA 75 năm
Bầu cử Hoa Kỳ 2016
Xung đột và Ngoại giao ở Biển Đông
Obama thăm Việt Nam
Học tiếng Anh
Video
Đăng nhập Facebook
Thêm
Chương trình mới nhất
Thêm
VOA Express
Phóng sự
Các chương trình khác
VOA Vietnamese Audio Tube
Chương trình mới nhất
VOA 4 giờ 30 sáng
Sắp tới
22:00 - 23:00
VOA 10 giờ khuya
04:30 - 05:00
VOA 4 giờ 30 sáng
Thêm
Chương trình 4 giờ 30 sáng
Chương trình 10 giờ khuya
Các chương trình khác
Tìm
Tìm
Trước
Kế tiếp
Tin mới
Trước
Kế tiếp
Trực tiếp
VOA Vietnamese Audio Tube
Hoa Kỳ
TT Obama khánh thành đài tưởng niệm cố lãnh tụ công đoàn Cesar Chave
09/10/2012
Tổng thống Hoa Kỳ Barack Obama
Tổng thống Obama chủ trì lễ khánh thành đài tưởng niệm cố thủ lãnh công đoàn Hoa Kỳ Cesar Chavez, biến tư gia của ông thành một Đài Tưởng niệm Quốc gia. Nhà lãnh đạo Mỹ nói rằng thế giới đã trở thành một nơi chốn tốt đẹp hơn, khi ông Chavez quyết định thay đổi thế giới.
Bà góa phụ Chavez vẫn cư ngụ trong ngôi nhà ở Keene, bang California, nằm về hướng bắc thành phố Los Angeles. Ông Chavez đã được chôn cất tại địa điểm này.
Ông Chavez thành lập Liên đoàn Công nhân Nông trại Mỹ vào năm 1962. Ông tổ chức một chiến dịch tẩy chay các hoạt động hái nho trên toàn quốc trong những năm 1960. Chiến dịch này kéo dài tới 5 năm và buộc các chủ trại trồng nho ký hợp đồng với giới lao động đi hái nho.
Hôm thứ Hai, Tổng thống Obama nói rằng ông Chavez đã mang lại niềm hy vọng cho những công nhân nông trại mà ông mô tả là “vô hình” đối với hầu hết người Mỹ. Họ hái trái cây và rau củ trong các điều kiện mặt trời nắng cháy, họ sống trong nghèo khổ và bị các nhà trồng trọt lường gạt.
TT Obama nói món quà do ông Chavez để lại không những chỉ mang lại lương bổng cao hơn và các điều kiện làm việc tốt hơn cho người lao động, mà còn nhắc nhở rằng mỗi cuộc sống đều có giá trị.
Ông Chavez qua đời vào năm 1993
Liên quan
Hạ Viện Mỹ khuyến cáo về 2 công ty viễn thông Trung Quốc
Ông Romney tấn công chính sách đối ngoại của TT Obama về Trung Đông
Chiến dịch tranh cử của Tổng thống Obama phá kỷ lục gây quỹ
Tin Hoa Kỳ mới nhất
Bộ Thương mại Mỹ đề xuất áp thuế nặng lên thép, nhôm từ Việt Nam
Người biểu tình tụ tập ở Florida kêu gọi luật kiểm soát súng nghiêm ngặt hơn
The New Yorker: Người mẫu Playboy ghi chép lại vụ ngoại tình với Trump
Cố vấn của Trump: Chuyện Nga can thiệp bầu cử là ‘không thể chối cãi’
Mỹ truy tố 13 người Nga can thiệp bầu cử 2016 nhằm ủng hộ Trump
Xem thêm
Bài xem nhiều nhất
1
Việt Nam quyết tâm tái cơ cấu quân đội trong năm mới
2
‘Thăm Nguyễn Tấn Dũng’: Ông Trọng trở nên đáng sợ đến thế nào?
3
Mỹ truy tố 13 người Nga can thiệp bầu cử 2016 nhằm ủng hộ Trump
4
Quốc hội Hoa Kỳ điều trần về tù nhân lương tâm Việt Nam
5
Du học sinh Việt Nam trồng cần sa ở Úc đối diện nguy cơ bị trục xuất
Bình luận nhiều nhất
Không có mục nào
Ảnh/Video xem nhiều nhất
1
Kho đồ dân tộc của bà lão Việt Kiều không muốn bị "teo tim"
2
Người Việt ở Mỹ đón Tết
3
Người Việt với nguy cơ trục xuất
4
Như lá rụng về cội
5
Người trực tiếp chỉ huy cuộc hải chiến Hoàng Sa qua đời
Recommended
Bên Kia Quốc Lộ - Tiếng Vọng Từ Nông Thôn Nước Mỹ
Back to top
XS
SM
MD
LG

Cache-Control: public, max-age=289


markdown:
# Casa Sibbe (with beautiful view)
![ Default](https://c50039.ssl.cf3.rackcdn.com/uploads/photo/file/20443793/default.jpg)
-
Accommodates5
-
Bedrooms2
-
Bathrooms1
-
Size180 m²
-
Floor No.
- Kitchen
- TV
- Towels
- Internet/WiFi
- Family/child friendly
- Indoor fireplace
- Parking available
- Washer/dryer
## Accommodation summary
|Address||Dorpstraat, 6301 BB Valkenburg aan de Geul, Netherlands|
|Property type||House|
|Property ID||76WWQGYZ|[Contact Astrid here](#modal-instant-session)
## Description
Located on walking distance from Valkenburg and near the Burgundian Maastricht. The sunny house is comfortable and warmly decorated, fully equiped and has a lovely garden with a spacious terrace. The property offers privacy and tranquility and is a warm and cozy environment for a wonderful holiday or weekend away. 2 bikes and 2 mountain bikes are available for free.
Sibbe is unique because of the many limestone buildings and the last remaining underground quarry for the extraction of limestone for construction.
Shopping in Burgundian Maastricht or just enjoying one of it's great terraces, it's just a 15 minutes drive from Sibbe.
Valkenburg is within walking distance which is perfect for a nice night out fun. Also a visit to Thermae 2000 (spa on the Cauberg) from Huize Sibbe is very easy to achieve. A day with the kids at Amusement Park De Valkenier or the indoor swimmingpool the Polfermolen. It is all nearby.
50 mt. of the house is the entrance to the marl caves (ASP), which via a spiral staircase descends to 50 mt. Tip: book in advance.
Walkers can pick it up here. From the property one walks directly into nature. The house is also ideally located for a visit to Belgium or Germany. And for cyclists / bikers an ideal place at the top of the Daelhemerweg.
The layout of the house is as follows:
Living room of 35 m2 with natural light and doors to the delightful garden. Fireplace with sofa and 4 easy chairs. Separate dining area with long table. Widescreen TV, CD player, DVD player, internet, WIFI. CDs, DVDs and books.
Kitchen is fully equipped with all needed kitchen utensils, a large Smeg cooker (5 gas burners) with oven, a large Bosch fridge / freezer and a dishwasher. From the kitchen the garden is accesible and in the scullery you find a washing machine, dryer and microwave.
The beautiful bathroom of 15 m2 is on 1st floor and has a lovely bath to relax, separate shower, large washbasin and a toilet. Downstairs there is a separate toilet.
Bedroom 1 (25m2) is located on the 1st floor.
Large bright bedroom with a large twin bed (180 cm-200 cm), flat screen TV with wooden floor, big wardrobe, a chest of drawers and windows looking out on the backyard with incredible panoramic views.
The second bedroom with wooden floor has 2 single beds (90cm x 200 cm). The room is approximately 15 m2 with lots of light, large wardrobe and a nice desk with a printer.
Bed linen, towels and kitchen linen are included in the price.
2 bikes and 2 mountain bikes are available for free.
Free parking.
## Map
## Conditions
|
|
## Prices
|Weekly rate for up to 2 guests||
|$ 886 US
|Price for > 2 guests||
|
$ 24 US
per guest/night extra
|
|
## Details
|Maximum nights||1 month|
|Check-in after||3 PM|
|Check-in before||On arrangement|
|Check-out before||Noon|
|Cancellation Policy||
|
## Reviews of this property
We hebben een heerlijk verblijf met drie (grote) kinderen achter de rug in een sfeervol huis met een prachtige grote tuin. Er staat een grote eettafel, zes eetstoelen, twee ligstoelen en een eivormige loungestoel waarin je heerlijk wiegelt. Ook een barbeque is aanwezig. Het huis is voorzien van alle gemakken (inclusief vaatwasser, wasmachine, droger) en smaakvol ingericht. De badkamer is ruim en heeft naast een douchecabine ook een bad. Ook de slaapkamers zijn ruim. We werden gastvrij opgevangen door de broer van de verhuurster die een sfeervolle winkel met streekproducten heeft. De ligging van het huis is perfect. Mooi uitzicht aan de voorzijde, vlakbij Valkenburg en een goede uitvalsbasis voor leuke tochtjes in de omgeving.
We hadden een zeer prettig contact met de verhuurster. Wat ons betreft absoluut een aanbeveling!!
Een prettig verblijf met een heerlijke tuin. Zeker een aanrader als je de omgeving van Maastricht wilt verkennen.
Der Aufenthalt im Haus von Astrid in Casa Sibbe war sehr angenehm. Das Haus ist mit viel Liebe eingerichtet. Die Ausstattung, vor allem der Küche, ließ keine Wünsche offen. Eine sehr schön angelegte Terrasse lädt zum Entspannen ein.
Die Kommunikation mit der Gastgeberin war sehr nett, ihre Infotipps hilfreich.
Wir möchten uns noch mal ganz herzlich für den schönen Pfingsturlaub bedanken.
Wir empfehlen dieses Haus gern und vor allem mit gutem Gewissen weiter.
Grüße B.+R.
- Quality assured accommodation
- Every host is verified by telephone
- Secure payment via SSL encryption

Content-Security-Policy: frame-ancestors 'self';

X-Content-Security-Policy: frame-ancestors 'self';

Cache-Control: max-age=0, private, must-revalidate

Backend: unicorn

X-Cache: Miss from cloudfront


markdown:
Menu
Luận văn - Báo cáo
Kinh tế thương mại
Công nghệ thông tin
Quản trị mạng
Lập trình
Đồ họa
Web
Hệ thống thông tin
Thương mại điện tử
Lập trình di động
Công nghệ - Môi trường
Y khoa - Dược
Khoa học xã hội
Quan hệ quốc tế
Giáo dục học
Đông phương học
Việt Nam học
Văn hóa - Lịch sử
Xã hội học
Báo chí
Tâm lý học
Văn học - Ngôn ngữ học
Khoa học tự nhiên
Toán học
Vật lý
Hóa học
Sinh học
Địa lý - Địa chất
Nông - Lâm - Ngư
Lâm nghiệp
Nông học
Chăn nuôi
Thú y
Thủy sản
Công nghệ thực phẩm
Cao su - Cà phê - Hồ tiêu
Báo cáo khoa học
Thạc sĩ - Cao học
Kinh tế
Khoa học xã hội
Khoa học tự nhiên
Công nghệ thông tin
Kỹ thuật
Nông - Lâm - Ngư
Kiến trúc - Xây dựng
Luật
Sư phạm
Y dược - Sinh học
Tiến sĩ
Kinh tế - Quản lý
Dịch vụ - Du lịch
Bất động sản
Tài chính - Ngân hàng
Quản trị kinh doanh
Kế toán
Kiểm toán
Xuất nhập khẩu
Chứng khoán
Tài chính thuế
Marketing
Bảo hiểm
Định giá - Đấu thầu
Lý luận chính trị
Triết học Mác - Lênin
Đường lối cách mạng
Kinh tế chính trị
Chủ nghĩa xã hội khoa học
Tư tưởng Hồ Chí Minh
Kỹ thuật
Giao thông - Vận tải
Điện - Điện tử
Viễn thông
Cơ khí - Vật liệu
Kiến trúc - Xây dựng
Tài chính - Ngân hàng
Ngân hàng - Tín dụng
Kế toán - Kiểm toán
Tài chính doanh nghiệp
Đầu tư chứng khoán
Đầu tư Bất động sản
Bảo hiểm
Quỹ đầu tư
Công nghệ thông tin
Thủ thuật máy tính
Kỹ thuật lập trình
Quản trị mạng
Thiết kế - Đồ họa
Hệ điều hành
Cơ sở dữ liệu
Quản trị web
Tin học văn phòng
An ninh bảo mật
Phần cứng
Chứng chỉ quốc tế
Giáo dục - Đào tạo
Luyện thi - Đề thi
Thi THPT Quốc Gia
Môn toán
Môn văn
Môn tiếng Anh
Vật lý
Hóa học
Sinh học
Lịch sử
Địa ly
Công chức - Viên chức
Đề thi lớp 1
Đề thi lớp 2
Đề thi lớp 3
Đề thi lớp 4
Đề thi lớp 5
Đề thi lớp 6
Đề thi lớp 7
Đề thi lớp 8
Đề thi lớp 9
Đề thi lớp 10
Đề thi lớp 11
Đề thi lớp 12
Tuyển sinh lớp 10
Môn toán
Môn văn
Môn tiếng Anh
Luyện thi Đại học - Cao đẳng
Khối A
Môn toán
Môn lý
Môn hóa
Môn tiếng Anh A1
Khối B
Môn toán
Môn hóa
Môn sinh
Khối C
Môn văn
Môn lịch sử
Môn địa lý
Khối D
Môn toán
Môn văn
Môn tiếng Anh
Quy chế tuyển sinh
Quy chế tuyển sinh 2015
Mầm non - Mẫu giáo
Mẫu giáo bé
Mẫu giáo nhỡ
Mẫu giáo lớn
Tiểu học
Lớp 1
Lớp 2
Lớp 3
Lớp 4
Lớp 5
Trung học cơ sở
Lớp 6
Lớp 7
Lớp 8
Lớp 9
Trung học phổ thông
Lớp 10
Lớp 11
Lớp 12
Cao đẳng - Đại học
Đại cương
Y dược
Chuyên ngành kinh tế
Khoa học xã hội
Luật
Công nghệ thông tin
Sư phạm
Kiến trúc xây dựng
Kỹ thuật công nghệ
Giáo dục hướng nghiệp
Vật lý
Toán học
Sinh học
Lịch sử
Địa lý
GDCD-GDNGLL
Âm nhạc
Mỹ thuật
Thể dục
Công nghệ
Tin học
Tiếng Anh
Luật
Văn học
Hóa học
Giáo án - Bài giảng
Mầm non
Tiểu học
Trung học cơ sở
Trung học phổ thông
Giáo án điện tử
Bài giảng điện tử
Sáng kiến kinh nghiệm
Ngoại ngữ
Tiếng Nhật - Hàn
Tiếng Nga - Trung - Pháp
TOEFL - IELTS - TOEIC
Ngữ pháp tiếng Anh
Anh ngữ phổ thông
Anh văn thương mại
Anh ngữ cho trẻ em
Kỹ năng nghe tiếng Anh
Kỹ năng nói tiếng Anh
Kỹ năng đọc tiếng Anh
Kỹ năng viết tiếng Anh
Chứng chỉ A,B,C
Kiến thức tổng hợp
Kế toán - Kiểm toán
Kế toán
Kiểm toán
Kinh tế - Quản lý
Quản lý nhà nước
Tiêu chuẩn - Qui chuẩn
Quản lý dự án
Quy hoạch đô thị
Kinh doanh - Tiếp thị
Quản trị kinh doanh
Internet Marketing
Kế hoạch kinh danh
Thương mại điện tử
Tiếp thị - Bán hàng
PR - Truyền thông
Kỹ năng bán hàng
Tổ chức sự kiện
Sách - Truyện đọc
Truyện dài
Ngôn tình
Sách-Ebook
Kinh tế
Ngoại ngữ
Công nghệ
Văn hóa giải trí
Giáo dục học tập
Y học
Truyện văn học
Truyện thiếu nhi
Truyện kiếm hiệp
Truyện cười
Truyện Ma - Kinh dị
Truyện ngắn
Tiểu thuyết
Tự truyện
Văn hóa - Nghệ thuật
Báo chí - Truyền thông
Âm nhạc
Ẩm thực
Khéo tay hay làm
Chụp ảnh - Quay phim
Mỹ thuật
Điêu khắc - Hội họa
Thời trang - Làm đẹp
Sân khấu điện ảnh
Du lịch
Tôn giáo
Kỹ thuật - Công nghệ
Điện - Điện tử
Kỹ thuật viễn thông
Cơ khí chế tạo máy
Tự động hóa
Kiến trúc xây dựng
Hóa học - Dầu khi
Năng lượng
Y tế - Sức khỏe
Y học
Sức khỏe - dinh dưỡng
Sức khỏe trẻ em
Sức khỏe phụ nữ
Sức khỏe người lớn tuổi
Sức khỏe giới tính
Khoa học tự nhiên
Toán học
Vật lý
Hóa học - Dầu khi
Sinh học
Môi trường
Khoa học xã hội
Triết học
Lịch sử
Địa lý
Văn học
Biểu mẫu - Văn bản
Biểu mẫu
Văn bản
Thủ tục hành chánh
Hợp đồng
Nông - Lâm - Ngư
Nông nghiệp
Lâm nghiệp
Ngư nghiệp
Kỹ năng mềm
Tâm lý - Nghệ thuật sống
Kỹ năng quản lý
Kỹ năng tư duy
Kỹ năng giao tiếp
Kỹ năng thuyết trình
Kỹ năng lãnh đạo
Kỹ năng phỏng vấn
Kỹ năng đàm phán
Kỹ năng tổ chức
Kỹ năng làm việc nhóm
Thể loại khác
Phật
Chưa phân loại
Văn khấn cổ truyền
Phong Thủy
Nạp tiền
Upload
Đăng nhập
OH! XIN LỖI BẠN
Trang bạn đang yêu cầu không tồn tại.
Về trang chủ
Liên hệ Xemtailieu
×
Đăng nhập
Đăng nhập với Facebook
or
Đăng nhập với Google
or
Đăng nhập
Bạn quên mật khẩu?

Server: Apache