2012-05-04 58 views
7

Mặc dù thực tế rằng đây không phải là thực hành mã hóa tốt, tôi muốn có một macro mà nên làm việc như sau:C vĩ mô tạo ra một biến với tên biến NSString như nội dung của chuỗi

CREATE_STRING(fooBar) 

Và nó nên tạo đoạn mã sau:

NSString *fooBar = @"fooBar"; 

vẻ vĩ mô của tôi như thế này:

#define CREATE_STRING(varName) NSString *varName = @"varName"; 

Bu t bây giờ tôi nhận được như sau

NSString *fooBar = @"varName"; 

Nó có vẻ là như vậy một vấn đề dễ giải quyết và tôi đã kiểm tra các tài liệu hướng dẫn from IBM nhưng tôi chỉ dường như không thể có được varName vào chuỗi.

Trả lời

10

Đây là cách để làm điều đó

#define CREATE_STRING(varName) NSString *varName = @"" #varName 

Phải mất lợi thế của một thực tế là hai chuỗi hằng số một sau khi khác được nối bởi trình biên dịch.

+2

ANYBODY có thực sự thử giải pháp của tôi trước khi downvoting không? –

+0

Điều này khác với câu trả lời của @ H2CO3 như thế nào? – trojanfoe

+1

Nó khác nhau ở chỗ nó nối hai chuỗi, không chỉ chèn tên C-stringified sau '@'. –

14

Sử dụng

#define CREATE_STRING(varName) NSString *varName = @#varName 

để thay thế. (Cũng lưu ý rằng bạn không cần dấu chấm phẩy dấu để có thể "gọi là" macro của bạn như một hàm C-như thế nào.)

+0

[...] Untitled.m: 7: 34: lỗi: sử dụng số nhận dạng không khai báo 'foo'; ý bạn là 'for'? NSString * mary = CREATE_STRING (foo); ^ Untitled.m: 3: 42: lưu ý: mở rộng từ macro 'CREATE_STRING' # define CREATE_STRING (varName) NSString * varName = @ # varName ^ 2 lỗi được tạo. –

+0

Bạn đã gọi nó là CREATE_STRING (foo); (với dấu chấm phẩy ở cuối khi gọi)? Nếu không, hãy thử làm như vậy. Lỗi KHÔNG ở thời điểm macro được sử dụng. –

+0

Tôi chỉ hoán đổi định nghĩa macro của bạn để có lỗi đó, bạn không thể làm việc được. Bạn chỉ có thể xâu chuỗi các macro trong bộ tiền xử lý, vì vậy cách tiếp cận tôi sử dụng trong câu trả lời của tôi là cần thiết để chuyển đổi các ký tự trống thành macro trước khi nó được xâu chuỗi. –

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