我正在使用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