ฉันอยากรู้ว่าเป็นไปได้หรือไม่ที่จะมั่นใจได้ว่าในเวลารวบรวมว่ามีการเรียกใช้วิธีการในที่เดียว
โปรดทราบว่ามันก็โอเคถ้าฟังก์ชั่นถูกเรียกมากกว่าหนึ่งครั้ง (เช่นในลูป) - แต่มันไม่ควรถูกเรียกในลูปสองวงแยกกัน
สิ่งนี้สามารถแบ่งออกเป็นสองส่วนฉันยังสนใจในโซลูชันที่ครอบคลุมส่วนใดส่วนหนึ่ง:
(a) ตรวจสอบให้แน่ใจว่ามีการเรียกวิธีการอย่างน้อยหนึ่งแห่ง
(b) ตรวจสอบให้แน่ใจว่ามีการเรียกวิธีการในที่เดียว
ฉันสามารถควบคุมโครงสร้างของโค้ดได้อย่างเต็มที่และสำนวนต่าง ๆ ที่ได้รับแนวคิดเดียวกันก็ยินดีต้อนรับ
// class.h
class MyClass {
public:
void my_method();
}
ต่อไปนี้ไม่ควรรวบรวม (ไม่เคยเรียก)
#include "class.h"
int main() {
MyClass my_class;
}
ข้อมูลต่อไปนี้ไม่ควรรวบรวม (เรียกมากกว่าหนึ่งแห่ง)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
ต่อไปนี้ควรรวบรวม (เรียกว่าในที่เดียว):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
__COUNTER__มาโครที่ไม่ได้มาตรฐานเพื่อทำสิ่งนี้ static_assert(__COUNTER__ == 0); my_class.my_method();สิ่งที่ชอบ อย่างไรก็ตามตัวนับจะรีเซ็ตในหน่วยการแปลแต่ละหน่วยเพื่อให้คุณสามารถตรวจสอบได้ว่ามีการเรียกใช้ฟังก์ชันหนึ่งครั้งต่อหนึ่งหน่วยการแปล