Bagikan melalui


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

#linedigit-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__ );}

Lihat juga

Arahan pra-prosesor