Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+调用NSLog+;:&引用;格式字符串不是字符串文字(可能不安全)"; 当我从C++调用NSLog时,Xcode抱怨传递给NSLO的格式字符串不是文字字符串。以下是触发警告的一行代码: NSLog(CFSTR("Leaking?")); 我不知道在C++中编写一个文字NSCORE的方法,我看不到我在项目设置中可以关闭的相关警告。有没有办法在不触发这个消息的情况下从C++调用NSLog?我使用的是Xcode 4.2.1 编辑:这是C++代码。我通常避免ObjuleC++,坚持Objto-C或普通的C++,因为没有关于Objul-C++中什么工作的官方文档,什么也没有。我只发现一些模糊的警告,例如STL的某些部分可能存在问题。我使用模板、STL和C++的其他“高级”功能,所以我想安全地玩。_C++_Objective C_Nslog - Fatal编程技术网

从C+调用NSLog+;:&引用;格式字符串不是字符串文字(可能不安全)"; 当我从C++调用NSLog时,Xcode抱怨传递给NSLO的格式字符串不是文字字符串。以下是触发警告的一行代码: NSLog(CFSTR("Leaking?")); 我不知道在C++中编写一个文字NSCORE的方法,我看不到我在项目设置中可以关闭的相关警告。有没有办法在不触发这个消息的情况下从C++调用NSLog?我使用的是Xcode 4.2.1 编辑:这是C++代码。我通常避免ObjuleC++,坚持Objto-C或普通的C++,因为没有关于Objul-C++中什么工作的官方文档,什么也没有。我只发现一些模糊的警告,例如STL的某些部分可能存在问题。我使用模板、STL和C++的其他“高级”功能,所以我想安全地玩。

从C+调用NSLog+;:&引用;格式字符串不是字符串文字(可能不安全)"; 当我从C++调用NSLog时,Xcode抱怨传递给NSLO的格式字符串不是文字字符串。以下是触发警告的一行代码: NSLog(CFSTR("Leaking?")); 我不知道在C++中编写一个文字NSCORE的方法,我看不到我在项目设置中可以关闭的相关警告。有没有办法在不触发这个消息的情况下从C++调用NSLog?我使用的是Xcode 4.2.1 编辑:这是C++代码。我通常避免ObjuleC++,坚持Objto-C或普通的C++,因为没有关于Objul-C++中什么工作的官方文档,什么也没有。我只发现一些模糊的警告,例如STL的某些部分可能存在问题。我使用模板、STL和C++的其他“高级”功能,所以我想安全地玩。,c++,objective-c,nslog,C++,Objective C,Nslog,编辑#2,解决方案:我刚刚发现clang支持的警告标志比实际记录的要多得多。(从Xcode提供给我的一长串警告中,这应该是显而易见的。)我尝试了-Wno格式的非文字gcc,现在Xcode很高兴 您所要做的就是编写@“this”来创建一个文本NSString对象 因此,将该行替换为NSLog(@“泄漏?”)你应该很好 您可能必须使用扩展名.mm重命名文件,以确保将其编译为Objective-C++(Objective-C和C++的变种爱子文件)。如果不想这样做,可以在一个调用NSLAMP的小型MM

编辑#2,解决方案:我刚刚发现clang支持的警告标志比实际记录的要多得多。(从Xcode提供给我的一长串警告中,这应该是显而易见的。)我尝试了-Wno格式的非文字gcc,现在Xcode很高兴

您所要做的就是编写
@“this”
来创建一个文本NSString对象

因此,将该行替换为
NSLog(@“泄漏?”)你应该很好

您可能必须使用扩展名
.mm
重命名文件,以确保将其编译为Objective-C++(Objective-C和C++的变种爱子文件)。如果不想这样做,可以在一个调用NSLAMP的小型MM文件中创建包装器函数,然后从C++代码中调用该函数。它看起来是这样的:

void MyNSLog(const char *message)
{
    NSLog(@"%s", message);
}

请注意,编译器给您带来麻烦的原因是,使用不可变字符串文字(其中内容在编译时已知)以外的任何内容都存在安全风险。否则,可以将格式字符串更改为包含不存在的参数的格式说明符(例如,
%d
)。如果发生这种情况,NSLog只会从堆栈中获取随机指针,可能会发生一些不好的事情。(有关更多信息,请参阅。)

如果您正在调用属于的
NSLog
,则您使用的是Objective-C。请使用
NSLog(@“泄漏?”)确保文件有一个<代码> mm >代码>扩展,以清楚说明你正在混合<代码> ObjultC.<代码>和<代码> C++ >代码> .< /P>如果你调用的是代码> NSLoo.<代码>,这是基础的一部分,那么你就使用Objyto.C使用“代码> @”泄露“<代码>,并确保你的文件有一个<代码> .mm < /Cord>扩展名。@乔…除非他指的是Objective-C++?@csl,否则我将注释移到了一个带有一些澄清的答案上。对于在单独的.mm文件中定义辅助函数的建议,+1。这次我没有使用它,但我相信它在将来会派上用场,因为我对使用Objective-C++一般都很谨慎。我只是想澄清一下,我很困惑。为什么不把这个代码命名为<代码> m>代码>扩展,而不是<代码> .mm < /> >,如果基础是ObjuleC?你的意思是说NSLO是客观C++,还是我迷惑了?谢谢我推测可能是从
.cpp
文件调用了
NSLog
,该文件不起作用,因为
NSLog
只是
Objective-C
。混合使用
Objective-C
C++
扩展。