Misalnya, saya baru-baru ini menemukan ini di kernel linux:
/ * Paksa kesalahan kompilasi jika kondisinya benar * / #menentukan BUILD_BUG_ON (kondisi) ((kosong) ukuran (char [1 - 2 * !! (kondisi)]))
Jadi, dalam kode Anda, jika Anda memiliki beberapa struktur yang harus, katakanlah kelipatan ukuran 8 byte, mungkin karena beberapa kendala perangkat keras, Anda dapat melakukan:
BUILD_BUG_ON ((sizeof (struct mystruct)% 8)! = 0);
dan itu tidak akan dikompilasi kecuali ukuran struct mystruct adalah kelipatan 8, dan jika kelipatan 8, tidak ada kode runtime yang dihasilkan sama sekali.
Trik lain yang saya tahu adalah dari buku "Graphics Gems" yang memungkinkan satu file header untuk mendeklarasikan dan menginisialisasi variabel dalam satu modul sementara di modul lain menggunakan modul itu, cukup mendeklarasikannya sebagai eksternal.
#ifdef DEFINE_MYHEADER_GLOBALS #define GLOBAL # Tentukan INIT (x, y) (x) = (y) #lain #define GLOBAL extern # Tentukan INIT (x, y) #berakhir jika INIT int GLOBAL (x, 0); GLOBAL int somefunc (int a, int b);
Dengan itu, kode yang mendefinisikan x dan somefunc:
#tentukan DEFINE_MYHEADER_GLOBALS #include "the_above_header_file.h"
sedangkan kode yang hanya menggunakan x dan somefunc () melakukan:
#include "the_above_header_file.h"
Jadi, Anda mendapatkan satu file header yang mendeklarasikan instance global dan prototipe fungsi jika diperlukan, dan deklarasi eksternal terkait.
Jadi, apa trik pemrograman C favorit Anda di sepanjang garis itu?