2011-01-24 13 views
6

Có điều gì giống như toán tử ANSI C _Pragma trong Visual C++ không?Toán tử tiền xử lý _Pragma trong Visual C++

Ví dụ, tôi đang cố gắng để xác định macro sau:

#ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) _Pragma (#x) 
#else // #ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) 
#endif // #ifdef _OPENMP 

Vì vậy, tôi có thể phá vỡ cảnh báo cho trình biên dịch biết #pragma omp ... trong trình biên dịch GCC cũ. Có phương tiện tương tự nào có sẵn trong VisualC++ không?

+0

Tôi khuyên bạn nên chỉ vô hiệu hóa cảnh báo đó. Các pragmas OpenMP được thiết kế để vô hại trong trình biên dịch không hỗ trợ chúng. –

Trả lời

6

Vâng, nhưng đó là hai dấu gạch dưới: __pragma

Tôi không chắc chắn về cách thức omp pragma hoạt động, tuy nhiên, đây là một ví dụ sử dụng VC++ 's optimize pragma:

#define PRAGMA_OPTIMIZE_OFF __pragma(optimize("", off)) 

// These two lines are equivalent 
#pragma optimize("", off) 
PRAGMA_OPTIMIZE_OFF 

EDIT: tôi đã xác nhận rằng các pragmas omp cũng có thể được sử dụng như thế này:

#define OMP_PARALLEL_FOR __pragma(omp parallel for) 

Vì vậy, vâng, macro của bạn nên làm việc nếu quy định như sau (lưu ý rằng mã ban đầu của bạn không đúng cách sử dụng các nhà điều hành stringizing #x:

#ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) __pragma (x) 
#else // #ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) 
#endif // #ifdef _OPENMP 
+0

Thực ra, tài liệu GCC đưa ra một ví dụ với '# x'. – Manuel

+4

@Manuel - Tôi nghĩ bạn đang bối rối '_Pragma' với' __pragma'; họ không may là các thực thể khác nhau với các cú pháp khác nhau (và sau này là MSVC cụ thể). Xem: http://stackoverflow.com/questions/3030099/c-c-pragma-in-define-macro/3030312#3030312 –