27

Tôi hiểu làm thế nào để sử dụng một chỉ thị tiền xử lý như thế này:Objective-C Preprocessor chỉ thị cho 'if not'

#if SOME_VARIABLE 
    // Do something 
#else 
    // Do something else 
#endif 

Nhưng nếu tôi chỉ muốn làm điều gì đó NẾU KHÔNG SOME_VARIABLE.

Rõ ràng là tôi vẫn có thể làm điều này:

#if SOME_VARIABLE 

#else 
    // Do something else 
#endif 

. . . để lại nếu trống, Nhưng có cách nào để làm:

#if not SOME_VARIABLE 
    // Do something 
#endif 

Tài liệu Apple here cho thấy không, nhưng điều này có vẻ như là một nhu cầu rất cơ bản.

Về cơ bản tôi muốn làm tương đương tiền xử lý của:

if(!SOME_VARIABLE)(
{ 
    // Do Something 
} 

Trả lời

61

bạn có thể thử:

#if !(SOME_VARIABLE) 
    // Do something 
#endif 
+0

Tôi đã xóa tất cả các tham chiếu đến TARGET_IPHONE_SIMULATOR. Đó chỉ là một ví dụ. Tôi chỉ muốn biết làm thế nào để nói NẾU KHÔNG trong một chỉ thị tiền xử lý. – Undistraction

+0

à, được rồi. các giải pháp cũng sẽ hoạt động. – CarlJ

+2

Vì vậy, nó có. Cảm ơn. – Undistraction

15

bạn đang cố gắng để kiểm tra xem một cái gì đó được định nghĩa hay không? Nếu có, bạn có thể thử:

#ifndef SOME_VARIABLE

hoặc

#if !defined(SOME_VARIABLE)

+0

Câu hỏi của tôi không có gì để làm cho dù nó được xác định hay không. Chỉ muốn có một cách để làm tương đương nếu if (! Some_var) {// do something}; – Undistraction

4

Các tài liệu Apple (If - The C Preprocessor) là đúng và đây là cách mà C tuyên bố trước xử lý đã được kể từ khi bình minh của thời gian. Theo cùng một tài liệu, tất cả những gì bạn có thể làm là tạo một biểu thức đánh giá bằng 0 hoặc giá trị khác 0 và sử dụng nó.

Câu trả lời của Meccan là chính xác như TARGET_IPHONE_SIMULATOR được định nghĩa là TRUE hoặc FALSE tùy thuộc vào nền tảng, do đó biểu thức sẽ đánh giá bằng 0 hoặc số không khác.

Nói chung, các macro này (#if vv) được sử dụng để bao gồm hoặc loại trừ mọi thứ dựa trên việc biểu tượng được xác định hay không. Đối với trường hợp sử dụng đó, bộ xử lý trước có #ifdef#ifndef bao gồm những gì trước đây được chấp nhận là trường hợp quan trọng nhất.

Ngoài ra, đối tượng của các câu lệnh này chỉ có thể là các ký hiệu được xác định trước của bộ xử lý khác (thông qua #define) thì giới hạn này là hợp lý.

+0

https://gcc.gnu.org/onlinedocs/gcc-4.2.4/cpp.pdf –

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