Sử dụng từ khóa #pragma trong lập trình
Em đang muốn biết thêm về #pragma once, anh chị nào có thể giúp em được không ạ? Càng nhiều thông tin dễ hiểu càng tốt :))
Anh nhớ anh giải thích cái này ở đâu đó rồi, chắc trên Facebook.
Bạn đang xem: Sử dụng từ khóa #pragma trong lập trình
#pragma là gì?
#pragma nói chung cũng là một tiền xử lý, nó sẽ được thực thi trước khi việc compile xảy ra. Em xem lại phần C của anh có nói về tiền xử lý.
Video Ngôn Ngữ C - 23 - Tiền xử lý #define videos
Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :Thông tin về khóa học xem tại đây :-Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
#pragma once là gì?
Có nhiều loại lệnh bắt đầu bằng #pragma mà trong đó #pragma once được sử dụng nhiều nhất, được nhiều compiler hỗ trợ. Tuy nhiên #pragma once không phải là chuẩn.
Bài này a có nói về chuẩn và không chuẩn
Video Ngôn Ngữ C - 49 - Phân biệt getchar và getch videos
Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :Thông tin về khóa học xem tại đây :-Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
Công dụng của #pragma once là để tránh việc include trùng lặp. Trong tiếng Anh, once có nghĩa là một lần. #pragma once đảm bảo cho việc include một file, một lần duy nhất. Ví dụ như sau lấy từ Wikipedia


pragma once | Wikiwand
In the C and C++ programming languages, #pragma once is a non-standard but widely supported preprocessor directive designed to cause the current source file to be included only once in a single compilation. Thus, #pragma once serves the same purpose...
File “grandparent.h”
#pragma once struct foo { int member;};File “parent.h”
#include "grandparent.h"File “child.c”
#include "grandparent.h"#include "parent.h"File child.c vừa include parent.h vừa include grandparent.h. Chú ý một điều là parent.h đã include grandparent.h. Điều này dẫn đến child.c sẽ include grandparent.h hai lần. Như vậy sẽ dẫn đến lỗi nếu có khai báo biến ở file grandparent.h. Lỗi đó gọi là lỗi khai báo nhiều lần redefinition.
Xem thêm: Hướng Dẫn Tải Skyrim Special Edition Việt Hóa Thành Công 100%
Để tránh lỗi xảy ra do include nhiều hơn một lần. Ta thêm #pragma once ở file grandparent.h. Trước khi compiler thực hiện compile, thì tiền xử lý sẽ đảm bảo child.c chỉ include grandparent.h một lần.
Cách khác để tránh include nhiều lần
Vậy nếu nói #pragma once không phải là chuẩn. Vậy chuẩn thì dùng cái nào? Ta dùng như sau
File "grandparent.h"#ifndef _GRANDPARENT_H // Nếu chưa định nghĩa _GRANDPARENT_H #define _GRANDPARENT_H // thì định nghĩa _GRANDPARENT_H ... nội dung của grandparent.h#endif /* !_GRANDPARENT_H */ // chấm dứtỞ đoạn code trên, người ta dùng một cái mẹo có sẵn trong C. Đó là người ta dùng tiền xử lý #ifndef, có nghĩa là if not define == nếu chưa định nghĩa. Thì mới định nghĩa cái đoạn bên trong của file đó, tức là phần nội dung của grandparent.h.
Giải thích khi ta include 1 file nhiều lần, như ví dụ trên
File child.c include grandparent.h lần đầu thì nội dung của grandparent.h sẽ được includeKhi File child.c include grandparent.h lần tiếp theo thì nội dung của grandparent.h sẽ không được include nữa, vì bây giờ _GRANDPARENT_H đã được định nghĩa.Xem thêm: Ý Nghĩa Hoa Phăng Có Ý Nghĩa Gì ? Ý Nghĩa Hoa Phăng
Vậy _GRANDPARENT_H là gì? Thực ra đây là một cái mẹo thôi, tên file gốc là grandparent.h thì ta thêm một _ ở trước và thay dấu . bằng _. Tất cả các chữ cái viết hoa lên hết là được _GRANDPARENT_H.