2015-02-11 17 views
5

nếu bạn có một cái gì đó như thế này:gì xảy ra với một chức năng c tĩnh mà không được gọi

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

static int func() 
{ 
    return 1; 
} 
static int func2() 
{ 
    return 2; 
} 

Có hợp lý để hy vọng rằng tùy thuộc vào nếu num là lớn hơn hoặc nhỏ hơn sau đó 99 ether func hoặc func2 sẽ bị xóa khỏi mã thời gian chạy?

Hoặc tôi có cần phải nhúng các chức năng vào một số #if để đạt được mục tiêu này không?

+6

"Mã thời gian chạy" không phải là một phần của tiêu chuẩn C, do đó tiêu chuẩn C không thể trả lời câu hỏi này. Đó là vấn đề liên kết của bạn hoạt động như thế nào. Dead code removal chắc chắn là một chiến lược tối ưu hóa đã biết và được sử dụng có sẵn trên nhiều nền tảng. –

Trả lời

2

Điều này phụ thuộc vào trình liên kết, nó có gì với mã chết là liên kết cụ thể. Bạn cũng nên bao gồm định nghĩa chức năng theo #if để đảm bảo rằng nó không kết quả thành mã máy.

1

Bạn sẽ cần phải nhúng các định nghĩa chức năng cũng trong một # nếu để đạt được mục tiêu.

mã có thể giống như sau:

Giả sử biến "num" đang nhận được cấu hình biểu mẫu dân cư.

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

#if(num>99) 
static int func() 
{ 
    return 1; 
} 
#else 
static int func2() 
{ 
    return 2; 
} 
#endif 

Hy vọng điều đó sẽ hữu ích. Cảm ơn bạn!

Các vấn đề liên quan