我正在使用objc_[sg]etAssociatedObject()
,並且此函數使用內存地址作爲關鍵字。如果我傳遞相同的字符串 - 例如"UIImageForTexture"
- 從兩個不同的文件進入函數,將兩個字符串文字有:不同文件中的字符串文字是否具有相同的內存地址?
- 相同的內存地址?
- 不同的內存地址?
- 它取決於一些其他因素。
- 它是未定義的。
我可以堅持字面在一個文件中的某個地方,並通過extern
提到它更明確地做到這一點,但我想知道如果我能避免這樣做。
我正在使用objc_[sg]etAssociatedObject()
,並且此函數使用內存地址作爲關鍵字。如果我傳遞相同的字符串 - 例如"UIImageForTexture"
- 從兩個不同的文件進入函數,將兩個字符串文字有:不同文件中的字符串文字是否具有相同的內存地址?
我可以堅持字面在一個文件中的某個地方,並通過extern
提到它更明確地做到這一點,但我想知道如果我能避免這樣做。
這將是從C99草案實現定義的行爲標準節6.4.5
字符串字面款說:
這是不確定的不管這些數組是否不同,只要它們的元素具有適當的值即可。如果程序試圖修改這樣一個數組,行爲是 未定義。
這是兩個具有相同內容的字符串文字(例如char *p1="abc;
char *p2="abc";
)是否具有相同的地址或不同的地址是實現細節。 p1
和p2
可以相等或不相等。 C標準不保證它們。
所以答案是(3)這取決於上的實現/優化。
不是直接傳遞字符串文字,而是使用指向它們的指針並傳遞它們。這樣,你可以可靠地處理它們,而不用擔心(1)和(2)。
好的,看起來像我必須以正確的方式做到這一點,甚至在同一個文件中看到它不能保證。 – Claudiu