arahan #define (C/C++)
Direktif #line memberi tahu preprocessor untuk mengatur nilai yang dilaporkan kompilator untuk nomor baris dan nama file ke nomor baris dan nama file tertentu.
Sintaks
#line
digit-sequence ["filename"]
Keterangan
Pengkompilasi menggunakan nomor baris dan nama file opsional untuk merujuk ke kesalahan yang ditemukannya selama kompilasi. Nomor baris biasanya mengacu pada baris input saat ini, dan nama file mengacu pada file input saat ini. Nomor baris bertahap setelah setiap baris diproses.
Nilai urutan digit dapat berupa konstanta bilangan bulat apa pun dalam rentang dari 0 hingga 2147483647, inklusif. Penggantian makro dapat digunakan pada token praproses, tetapi hasilnya harus dievaluasi ke sintaks yang benar. Nama file dapat berupa kombinasi karakter apa pun dan harus diapit dalam tanda kutip ganda (" "
). Jika nama file dihilangkan, nama file sebelumnya tetap tidak berubah.
Anda dapat mengubah nomor baris sumber dan nama file dengan menulis direktif #line
. Direktif #line
menetapkan nilai untuk baris yang segera mengikuti arahan dalam file sumber. Penerjemah menggunakan nomor baris dan nama file untuk menentukan nilai makro __FILE__
yang telah ditentukan sebelumnya dan __LINE__
. Anda dapat menggunakan makro ini untuk menyisipkan pesan kesalahan deskriptif mandiri ke dalam teks program. Untuk informasi selengkapnya tentang makro yang telah ditentukan sebelumnya ini, lihat Makro yang telah ditentukan sebelumnya.
__FILE__
Makro diperluas ke string yang kontennya adalah nama file, dikelilingi oleh tanda kutip ganda (" "
).
Jika Anda mengubah nomor baris dan nama file, pengkompilasi mengabaikan nilai sebelumnya dan melanjutkan pemrosesan dengan nilai baru. Arahan #line biasanya digunakan oleh generator program. Ini digunakan untuk menyebabkan pesan kesalahan merujuk ke file sumber asli, bukan ke program yang dihasilkan.
Contoh
Contoh berikut mengilustrasikan #line
dan __LINE__
makro dan __FILE__
.
Dalam contoh pertama, nomor baris diatur ke 10, lalu ke 20, dan nama file diubah menjadi hello.cpp.
// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>
int main()
{
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp
Dalam contoh ini, makro ASSERT
menggunakan makro __LINE__
yang telah ditentukan sebelumnya dan __FILE__
untuk mencetak pesan kesalahan tentang file sumber jika pernyataan tertentu tidak benar.
#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}