Memperluas makro untuk debugging?

Saya baru dalam menggunakan fungsi makro dan saya memahami ada beberapa kendala dalam penggunaannya terkait urutan operasi. Apakah ada cara untuk memperluas makro setelah praprosesor melewatinya sehingga saya dapat melihat seperti apa tampilannya?

Di VS2017, saya sudah mencoba Processor > C/C++ > Preprocessor > Preprocess ke file yang membuat file *.i tetapi panjangnya sekitar 50 ribu baris dan sepertinya saya tidak dapat menemukan di mana makro saya diperluas.

sunting: Saya tahu makro adalah berita buruk, namun, basis kode yang saya gunakan cukup banyak menggunakannya jadi saya mencoba untuk lebih memahaminya.


person Joe    schedule 04.05.2018    source sumber
comment
Jika Anda memperluas makro, Anda akan mendapatkan banyak kode untuk dilihat - salah satu dari banyak alasan mengapa Anda tidak boleh menggunakan makro, setidaknya di C++.   -  person    schedule 04.05.2018
comment
Dipahami - sayangnya, basis kode yang saya gunakan menggunakannya, jadi saya mencoba mencari cara untuk memahaminya.   -  person Joe    schedule 04.05.2018
comment
Jika Anda menggunakan IDE seperti eclipse, Anda cukup mengarahkan kursor ke makro dan makro tersebut akan diperluas di jendela popup.   -  person Galik    schedule 04.05.2018
comment
Saya menggunakan VS2017, ketika saya mengarahkan kursor ke makro, ia hanya memberi tahu saya apa yang saya lihat.   -  person Joe    schedule 04.05.2018
comment
Menambah komentar @Galik - Anda dapat melihat perluasan langkah demi langkah dan kemudian memahami urutannya.   -  person SHG    schedule 04.05.2018
comment
Beberapa kompiler memiliki saklar baris perintah yang memungkinkan pembuangan file sumber yang telah diproses sebelumnya. Periksa opsi untuk kompiler Anda.   -  person Thomas Matthews    schedule 04.05.2018
comment
Opsi untuk membuat file .i mungkin adalah yang terbaik yang akan Anda dapatkan. Tapi: pencarian adalah teman Anda! Baca file ke dalam editor teks yang bagus, dan cari beberapa kata kunci atau pemanggilan fungsi yang Anda tahu dekat dengan perluasan makro yang Anda minati, dan Anda seharusnya dapat menemukannya.   -  person Steve Summit    schedule 04.05.2018
comment
@ThomasMatthews Mereka sudah mencobanya, tetapi panjangnya sekitar 50 ribu baris dan sepertinya saya tidak dapat menemukan di mana makro saya diperluas.   -  person Baum mit Augen    schedule 04.05.2018
comment
Saya baru dalam menggunakan fungsi makro - maka pelajari ini sekarang: jangan menggunakan makro sama sekali (kecuali dalam beberapa situasi di mana makro benar-benar/sayangnya adalah satu-satunya pilihan).   -  person Jesper Juhl    schedule 04.05.2018
comment
@Steve Summit - Tentu. Saya hanya memberikan saran umum. Dan bahkan makro yang diwariskan biasanya, dalam banyak kasus, dapat ditulis ulang sebagai fungsi yang tepat ;-)   -  person Jesper Juhl    schedule 04.05.2018
comment
@Steve Summit Dalam buku saya tumpul == bagus. Saya hanya mencoba memahami inti dari jangan gunakan makro.   -  person Jesper Juhl    schedule 04.05.2018


Jawaban (1)


Di VS2017, saya sudah mencoba Processor > C/C++ > Preprocessor > Preprocess ke file yang membuat file *.i tetapi panjangnya sekitar 50 ribu baris dan sepertinya saya tidak dapat menemukan di mana makro saya diperluas.

Anda dapat membantu diri Anda sendiri dengan mendeklarasikan variabel dummy sebelum baris di mana makro digunakan.

E.g.

extern int dummyIntVariable;
MY_COMPLICATED_MACRO(arg1, arg2);

Setelah itu, Anda mencari dummyIntVariable di file .i. Baris di bawahnya akan berisi apa yang MY_COMPLICATED_MACRO diperluas.

Atau seperti yang ditunjukkan @Sneftel dalam komentar, Anda dapat menggunakan string lama apa pun yang membantu Anda menavigasi file .i.

THIS IS A UNIQUE STRING
MY_COMPLICATED_MACRO(arg1, arg2);

Karena file tersebut baru saja diproses sebelumnya, itu juga akan berfungsi.

person R Sahu    schedule 04.05.2018
comment
Jika Anda hanya melakukan pra-pemrosesan, Anda bahkan tidak perlu mendeklarasikan variabel dummy. - person Sneftel; 04.05.2018
comment
@Sneftel, Variabel dummy berguna untuk menavigasi 50 ribu baris yang dilihat OP di file .i. - person R Sahu; 04.05.2018
comment
Tidak, maksud saya, kodenya tidak perlu dikompilasi, cukup proses awal. Anda cukup memasukkan THIS IS A UNIQUE STRING ke dalamnya, dan menerimanya. - person Sneftel; 04.05.2018
comment
@Sneftel, begitu. Ya, itu juga sebuah pilihan. - person R Sahu; 04.05.2018