ThanhNT Blog's

Computer, Networking, Embedded Systems, PCB Design

[Review] Code C theo chuẩn - Embedded C Coding Standard (Michael Barr)

Embedded C Coding Standard Bài viết này sẽ note ra vài điều mà tôi có được sau khi đọc cuốn ebook như trên tiêu đề - Code C nhúng theo chuẩn (Embedded C Coding Standard - Michael Barr). Code theo chuẩn Tại sao phải code theo chuẩn? Từ trước đến giờ code vẫn chạy ngon, có vấn đề gì đâu? Trong quá trình học lập trình cơ bản và giờ là lập trình nhúng, khi tham khảo và phát triển mã nguồn thì tôi thường hay gặp chung 1 vấn đề, đó là các mã nguồn được viết không theo 1 chuẩn nào cả.

C/C++ Preprocessor - Macro

C/C++ Preprocessor C/C++ Preprocessor Khái niệm macro Macro - một cái tên nghe khá hổ báo, được dùng để chỉ những hàm được viết ở phần Preprocessor, thay vì đặt nó vào trong phần thực thi của file nguồn. Ngoài ra khi nói đến macro có 1 nghĩa khác nữa, ám chỉ đến tất cả những phần định nghĩa được viết trong phần Preprocessor. Trong bài viết này thì mình dùng macro với cách dùng đầu tiên.

C/C++ Preprocessor - Constant và Conditional Inclusion

C/C++ Preprocessor Hằng số (Constant) #define được dùng để định nghĩa hằng số trong preprocessor. Cách sử dụng như sau: #define THREE 3 Sau câu lệnh này thì bất cứ chỗ nào có THREE trong code của bạn thì compiler sẽ thay nó thành 3 hết. Tuy nhiên, vì trình biên dịch ko hiểu cái 3 trên là số hay là chữ, là int hay float, nó chỉ đơn giản làm công việc copy và paste những gì đã được định nghĩa mà thôi.

Lập trình C theo tinh thần hướng đối tượng

Cách viết C theo tinh thần hướng đối tượng Nếu như võ công chỉ có vài môn phái chiếm đa số như kiếm tông, khí tông thì lập trình cũng vậy, chỉ có vài paradigm chiếm thế thượng phong như lập trình thủ tục, lập trình hướng đối tượng. Học là học cái tinh thần, thỉnh thoảng đâu đó ta nghe nói dùng PHP4 cũng có thể lập trình hướng đối tượng như PHP5, ngôn ngữ Ruby hướng đối tượng viết bằng ngôn ngữ C không hướng đối tượng là vì vậy.

4 tính chất đặc thù của lập trình hướng đối tượng

Tính chất đặc thù của lập trình hướng đối tượng Với lập trình hướng đối tượng (OOP), có 2 câu hỏi thực dụng: Nó có những tính chất đặc thù gì? Để ta có thể dễ nhớ, dễ hiểu, dễ hình dung về nó. Khi học một ngôn ngữ OOP nào đó, làm sao để kiểm tra xem ta đã nắm bắt được ngôn ngữ này hay chưa, bằng cách viết thử code để diễn tả các đặc thù này bằng cú pháp của ngôn ngữ này?

Từ khóa Static trong lập trình C/C++

Từ khóa Static Mở đầu Khi học C cơ bản, chắc hẳn bạn sẽ gặp cách dùng từ khoá static như ví dụ dưới đây: #include <stdio.h> void count(int i) { static int num = 0; num += i; printf("current value of num: %d\n", num); } int main() { count(1); count(3); return 0; } Kết quả khi chạy chương trình sẽ là: current value of num: 1 current value of num: 4 Biến num khai báo static như trên có 2 đặc điểm:

Từ khóa virtual trong C++

# Tác dụng của từ khoá virtual, tại sao cần có virtual function Một số tài liệu có viết công dụng của Virtual Function như sau: Virtual Function là để khai báo một function ở class cha (base class) mà sau đó các class kế thừa (derived class) có thể override function đó. Nhưng chờ đã, có gì không ổn ở chỗ này, nếu chỉ là để override thôi thì mình hoàn toàn có thể khai báo function ở base class mà không cần virtual thì vẫn được cơ mà.

[C/C++] Include guard trong C và C++

Khi làm quen với C hoặc C++ chắc bạn sẽ rất quen với mấy dòng kiểu như sau ở đầu và cuối mỗi file thư viện .h #ifndef _file_name_h #define _file_name_h /* file content */ #endif Những dòng trên được gọi là Include Guard (thực ra chính xác hơn là #include guard), đến đây thì bạn cũng lờ mờ đoán ra mớ code nhiều dấu thăng ở trên để làm cái gì rồi.

[Dev] Hàm đếm bit nhanh - Fast bit counter

Fast bit counter Mở đầu Bạn đang chăm chú ngắm nghía 1 đoạn code, bỗng nhiên bạn gặp một hàm trông có vẻ rất nguy hiểm như sau: int fbc(unsigned int data) { data = (data & 0x55555555) + ((data >> 1) & 0x55555555); data = (data & 0x33333333) + ((data >> 2) & 0x33333333); data = (data & 0x0F0F0F0F) + ((data >> 4) & 0x0F0F0F0F); data = (data & 0x00FF00FF) + ((data >> 8) & 0x00FF00FF); data = (data & 0x0000FFFF) + ((data >> 16) & 0x0000FFFF); return data; } Một đoạn hàm rất bí ẩn với một loạt các phép toán logic >>, &, +.

[Dev] Tính căn bậc 2 theo cách khác

Tính căn bậc 2 mà không dùng sqrt Vấn đề Trong một buổi phỏng vấn, có một câu hỏi như sau: Hãy viết chương trình C tính căn bậc 2 của số nguyên x Trong chớp mắt, bạn có thể đưa ra ngay lời giải với đoạn code ngắn gọn sau: #include <stdio.h> #include <math.h> int main() { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %f\n", x, sqrt(x)); } Input x: 3 Sqrt of 3 = 1.