2013-07-31 38 views
7

tôi có một phần của mã như dưới đây:#ifdef không làm việc như mong đợi với tiêu đề precompiled

#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifdef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

Chương trình không thực thi mã bên #ifdef - #endif. Nhưng khi tôi thay đổi #ifdef thành #ifndef và xóa #define macro, mã được thực thi. Mã bên dưới hoạt động như mong đợi.

//#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifndef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

bất cứ ai có thể giải thích lý do tại sao trong các mã trường hợp đầu tiên bên #ifdef - #endif không được thực hiện và trong trường hợp thứ hai cho nó hoạt động? Bất cứ ai có thể cho tôi biết cài đặt nào có thể sai?

Không chắc nếu vấn đề này, tôi đang sử dụng visual studio 2010.

Cảm ơn trước

UPDATE: Khi tôi sạch và tái chạy, điều thứ hai cũng không làm việc. chỉ hiển thị trong trình chỉnh sửa dưới dạng mã được bật.

Khi tôi xác định macro trong project-> property-> Configuration Properties-> c/C++ -> Preprocessor, cả hai đều hoạt động tốt.

+1

bạn có chắc rằng bạn không có 'FEATURE_A' #undef nơi nào đó? – mvp

+1

Nếu bạn muốn xem mã sau khi tiền xử lý biên dịch với cờ '-E' – aaronman

+0

Bạn cần đăng toàn bộ chương trình thể hiện hành vi này, vì nó không có ý nghĩa gì. –

Trả lời

10

Có thể là do cách Microsoft triển khai các tiêu đề được biên dịch trước. Bạn thực sự có

#define FEATURE_A 1 
#include "stdafx.h" // <- all code even ascii art before that line is ignored. 

void function() 
{ 
// some code 

#ifdef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

Move nó sau khi tiêu đề biên dịch sẵn và tất cả các công trình:

#include "stdafx.h" // <- all code even ascii art before that line is ignored. 
#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifdef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 
+0

Cảm ơn rất nhiều. công việc của nó như ma thuật :) –