首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS #define 定義字串常量的正確語法:去掉分號、加上 @ 符號

     編輯:程式設計綜合問答

錯誤代碼


#define kCountry "Country"; // 錯誤:含分號、缺 @

編譯器將分號視為宏定義一部分,展開時變為 @"Country"; 導致語法錯誤;且無 @ 前綴為 C 字串而非 NSString。

正確寫法


// 方式 1:宏定義 NSString 常量(推薦用 static const 替代)
#define kCountry @"Country" // 無分號、有 @

// 方式 2:靜態常量(類型安全、作用域可控、調試可見)
static NSString *const kCountry = @"Country"; // 放在 .m 文件頂部

// 方式 3:外部可見常量(.h 聲明 extern,.m 定義)
// .h: extern NSString *const kCountry;
// .m: NSString *const kCountry = @"Country";

使用示例


float floatCountries = 74.2f; // 注意:OC 浮點字面量用點號,非逗號
[[NSUserDefaults standardUserDefaults] setFloat:floatCountries forKey:kCountry];
float test = [[NSUserDefaults standardUserDefaults] floatForKey:kCountry];
NSLog(@"%f", test); // 輸出 74.200000

宏 vs 靜態常量對比

特性#definestatic const
類型檢查無(預處理文本替換)編譯期類型安全
調試器可見性不可見(展開後無符號)可見(有符號表條目)
作用域控制無(全局文件級)文件級或模塊級
內存佔用每次使用可能重複創建字面量單一實例,編譯器優化

最佳實踐建議

  • **內部常量**:static NSString *const KEY = @"value"; 放在 .m 文件。
  • **跨文件共享**:.h 用 extern NSString *const KEY;,.m 定義。
  • **避免宏定義對象**:宏適合簡單數值(#define MAX_COUNT 100),字串/對象用常量。
  • **命名規範**:項目前綴 + 模塊 + 語義,如 KYUserDefaultsKeyLastLoginDate。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved