Thông tin tài liệu:
Cú pháp ngôn ngữ (lập trình) C
// Dòng này sẽ được bỏ qua (không đọc) bởi trình dịch. /* Các dòng này cũng được bỏ qua bởi trình dịch */ ... (Tiếp tục mã C)
là tập hợp các qui tắc nhằm xác định cách thức để viết và dịch trong ngôn ngữ lập trình C. Thí dụ:
Các hàm
Cú pháp
Một hàm C phải bao gồm một kiểu trả về (kiểu đó trả về void nếu không có giá trị trả về), một tên xác định, một danh sách các tham số để trong ngoặc đơn (nếu danh sách này không có...
Nội dung trích xuất từ tài liệu:
Cú pháp ngôn ngữ (lập trình) C
Cú pháp ngôn ngữ (lập trình) C
là tập hợp các qui tắc nhằm xác định cách thức đ ể viết và dịch trong ngôn ngữ lập trình C .
Thí dụ:
// Dòng này sẽ được bỏ qua (không đọc) bởi trình dịch.
/* Các dòng này
cũng được bỏ qua
bởi trình dịch */
... (Tiếp tục mã C)
Các hàm
Cú pháp
Một hàm C phải bao gồm một kiểu trả về (kiểu đó trả về void nếu không có giá trị trả về), một
tên xác định, một danh sách các tham số để trong ngoặc đơn (nếu danh sách này không có tham
số nào thì ghi là void bên trong dấu ngoặc), sau đó là khối các câu lệnh (hay khối mã) và/hay các
câu lệnh return. (Nếu kiểu trả về là void thì mệnh đề này không bắt buộc phải có. Ngược lại,
cũng không bắt buộc chỉ có một câu lệnh return mà tùy theo kỹ thuật, người lập trình có thể dẫn
dòng mã sao cho mọi hướng chẻ nhánh đều được trả về đúng kiểu.)
tên_hàm()
{
return ;
}
Trong đó, của N biến thì được khai báo như là kiểu dữ liệu và tách rời
nhau bởi dấu phẩy ,:
var1, var2, ..., varN ;
Toàn bộ danh sách này được đặt trong ngoặc đơn ngay sau tên_hàm.
Thí dụ
Hàm add tính tổng hai số có kiểu integer , hàm abs tính trị tuyệt đối của số có kiểu integer, và
chương trình (hàm main) hiển thị hai dòng 1 + 1 = 2 và absolute value of -2 is 2
#include ; //Chú giải: dòng này khai báo tập tin bao gồm là
stdio.h
int add(int x, int y)
{
return x + y;
}
int abs(int x)
{
if (x > 0) return x;
if (x < 0) return -x;
if (x == 0) return 0;
/* đây chỉ là thí dụ cho thấy C có khả năng dùng nhiều hơn 1 câu lệnh
return
hoàn toàn có thể dùng các câu lệnh khác đơn giản hơn. */
}
void main(void)
{
int z = 1;
int y = -2;
printf(%d + 1 = %d\n, z, add(z, 1));
printf (absolute value of %d is %d, y, abs(y));
}
Chú ý: phần mã trên đã được thử thành công dùng trình dịch GNU (cho ANSI C và C99)
Hàm chủ main có kiểu trả về là void nên không cần câu lệnh return.
Mô tả
Trong các câu lệnh tiền xử lý, ở cấp độ cao nhất, một chương trình ngôn ngữ C luôn có một
chuỗi các khai báo cho các tập tin bao gồm.
Sau đó là các khai báo của phạm vi tập tin. Các khai báo này giới thiệu các hàm, các biến và các
kiểu biến. Các hàm trong C nhìn tương tự với các chương trình con của Fortran hay các thủ tục
của Pascal. Định nghĩa của hàm xuất hiện trong phần thân của nó (phần giữa bộ dấu ngoặc { và }
theo sau nguyên dạng của hàm).
Các chương trình trong C để tạo các ứng dụng trực tiếp đều cần phải có một hàm đặc biệt tên là
main, đây sẽ là hàm đầu tiên được gọi khi chương trình bắt đầu thực thi. Sau đây là một chươ ng
trình đầy đủ mặc dù không có mấy ứng đụng thiết thực.
int main (void)
{
return 0;
}
Hàm code>main thường gọi các hàm khác để giúp nó hoàn tất công việc (tuỳ theo sự lập trình
của người dùng).
Trọng một số trường hợp C được dùng không phải để tạo ra các ứng dụng trực tiếp mà để dùng
với hệ điều hành hay các nơi khác (như là phát triển các bộ điều vận, các phần sụn, hay các thư
viện...). Những trường hợp như vậy thì người lập trình hoàn toàn tự do trong việc giải quyết làm
sao để xử lý khởi động chương trình, đặc biệt nó sẽ không cần định nghĩa hàm main.
Các hàm có thể được viết ra bởi người lập trình hay được cung cấp sẵn bởi các thư viện. Các thư
viện cần được khai báo (sử dụng) bằng cách nêu tên các tập tin tiêu dề trong câu lệnh dạng
#include tập tin tiêu đề. Một số hàm thư viện như là printf đã được định nghĩa bởi chuẩn
C, chúng được tham chiếu như là các hàm thư viện chuẩn.
Một hàm có thể trả về một giá trị cho môi trường gọi nó. Khi hàm main trả về giá trị 0 chỉ dấu
cho rằng toàn bộ chương trình đã hoàn tất thành công và kết thúc. Hàm printf cùng có giá trị
trả về, đó là số lượng kí tự đã hiển thị, nhưng giá trị này thường bị bỏ qua không dùng.
Truyền các biến
Các biến trong C được truyền qua các hàm bằng giá trị trong khi nhiều ngôn ngữ khác lại được
truyền bằng tham chiếu (hay bằng địa chỉ). Điều này có nghĩa là hàm chỉ chép lại các giá trị và
không thể thay đổi các giá trị đó của các biến (hay đối số) đưa vào. Để có thể thay đổi được giá
trị của các biến truyền vào, người lập trình có thể truyền địa chỉ của nó vào hàm và tham chiếu
ngược nó trong hàm được dùng (xem thêm kiểu tham chiếu)
void incInt(int *y)
{
(*y)++; // tăng giá trị của x trong main 1 đơn vị
}
void main(void)
{
int x = 0;
incInt(&x); // chuyển một tham chiếu vào incInt cho 'x'
}
Để có thể chuyển một con trỏ (mà có thể cần đổi địa chỉ nó chỉ đến), có thể chuyển một tham
chiếu cho con trỏ (tham chiếu này chỉ đến điạ chỉ của con trỏ):
void setInt(int **p, int n)
{
*p = (int *) malloc(sizeof(int)); // đăng kí một vùng nhớ
*p = n; // cài giá trị vào
}
void main(void)
{
int *p; //khai báo một con trỏ kiểu integer
setInt(&p, 42); // chuyển giá trị của 'p' vào.
}
int **p sẽ định nghĩa một con trỏ chỉ đến con trỏ (thay vì chỉ đến các kiểu dữ liệu thông
thường) tức là chỉ đến địa chỉ của con trỏ p.
Hàm scanf làm việc theo cùng một cách thức:
int x;
scanf(%d, &x);
Các cấu trúc dòng điều khiển
Một cách cơ bản thì C là ngôn ngữ dạng tự do. Trong phần này, tất cả các chữ mệnh đề có
nghĩa tương đương với chữ câu lệnh.
Các mệnh đề phức hợp
Câu lệnh phức hợp được bọc trong dấu ngoặc { và } còn được gọi là khối mã. Các câu lệnh
phức hợp trong C có dạng.
{ }
Khối mã được dùng như là phần thân của một hàm hay đưọc đặt bất kì ở vị trí nào mà một câu
lệnh đơn giản có thể đặt. Nghĩa là, về ý nghĩa văn phạm thì câu lệnh đơn giản và câu lệnh phức
hợp là tương đương nhau.
Các mệnh đề biểu thức
Một câu lệnh (hay một mệnh đề) của C có dạng:
;
là một mệnh đề biểu thức. Nếu biểu thức này không có nội dung (mà chỉ còn lại dấu ; thì biểu
thức được gọi là mệnh đề null (hay mệnh dề rỗng). (Theo ngôn ngữ máy Assembler thì mệnh
đề null sẽ tương ...