【问题标题】:How resolve error:Conflicting type for "snprintf"如何解决错误:“snprintf”的类型冲突
【发布时间】:2012-10-29 10:30:25
【问题描述】:

在我的应用程序中,我使用 Compiler for C/C++/Objective-CApple LLVM compiler 4.1 用于模拟器。 对于模拟器,这是可行的。当我为设备编译相同的代码时,我更改了 Compiler for C/C++/Objective-CLLVM GCC 4.2。 这次我在 stdio.h 中遇到错误“冲突类型对于“sprintf”“。

我使用的是 Mac OS x 10.7.4 Xcode 4.5(iOS 6)

这在 (Mac OS x 10.7.4 & Xcode 4.2.3(iOS 5)) && (Mac OS x 10.6.8 & Xcode 3.2.3(iOS 4)) 中运行良好。

对于 LLVM 编译器,iOS 5 和 iOS 6 有什么区别。有人请帮帮我吗?

【问题讨论】:

    标签: compiler-errors osx-lion xcode4.5 llvm-gcc llvm-clang


    【解决方案1】:

    我在 Mac OS X 下编译通用应用程序时,使用数据类型 NSIntegerNSUInteger 时看到此警告:

    NSInteger thing = 7;
    NSLog(@"Thing is %ld", thing);
    

    这将在 64 位下工作,但在 32 位下会发出警告(提示;iOS 使用 32 位架构)。

    (丑陋的)解决方案是在这种情况下将thing 强制为long

    NSLog(@"Thing is %ld", (long)thing);
    

    这在任何地方都可以使用。

    这比:

    #ifdef __x86_64
    NSLog(@"Thing is %ld", thing);
    #else
    NSLog(@"Thing is %d", thing);
    #endif
    

    【讨论】:

    • 你好木马,我在很多地方都使用字符串。很难修改所有地方。是否有任何其他解决方案,或者我们可以将 64 位转换为 32 位。
    • @sreenivas 没有;无论需要多长时间,修复代码都是值得的。如果您不这样做,那么您将习惯于在编译时出现警告,并错过一个会让您陷入困境的重要警告。
    • 字符串呢?我该如何使用字符串。
    • @sreenivas 你是什么意思?正在生成哪些字符串警告?
    猜你喜欢
    • 2021-12-21
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2015-02-06
    • 2013-10-19
    • 2016-02-07
    相关资源
    最近更新 更多