gpt4 book ai didi

objective-c - 为什么编译器会提示我的简单函数调用?

转载 作者:行者123 更新时间:2023-12-01 22:40:58 24 4
gpt4 key购买 nike

刚从 Java 背景学习 Objective-C。我正在尝试编写一个除了教我如何用这种语言编写函数之外没有其他目的的程序,但我到处都会遇到错误。问题是因为我昨天才开始使用这种语言,所以这些错误对我来说毫无意义。这是我目前所拥有的。

主要方法:

int main (int argc, const char * argv[])
{
@autoreleasepool
{
NSString * prompt = @"Hello World";

prompt = writePromptMessage(prompt);

NSLog(@"%@", prompt);
}

return 0;
}

特殊方法:

NSString *writePromptMessage(NSString * prompt)
{
return prompt;
}

我的错误:

  • 函数 writePromptMessage 的隐式声明在 C99 中无效
  • ARC 不允许将“int”隐式转换为“NSString *”
  • 不完整的整数到指针的转换,从 int 分配 NSString strong
  • writePromptMessage 的冲突类型

最佳答案

与 Java 不同,您需要在使用它之前添加一个函数声明(又名函数原型(prototype))。函数声明就像函数定义一样,但没有函数体(即代码),并以分号结尾:

// This is a function declaration:
NSString *writePromptMessage(NSString * prompt);

// This is a function definition:
NSString *writePromptMessage(NSString * prompt)
{
// Function body goes here
}

为了能够调用函数,您需要在使用站点之前编写声明:

NSString *writePromptMessage(NSString * prompt);  // declaration

int main (int argc, const char * argv[])
{
...
writePromptMessage(...); // usage
}

// definition follows

或者,您可以将整个定义放在使用位置之前,但这并不总是可行的(例如,如果您有两个可以相互调用的函数)。

C 和 Objective-C 实际上允许您调用没有可见声明的函数,但这被认为是不推荐使用的功能,因为它很容易被滥用并导致细微的错误:

如果在没有可见声明的情况下调用函数,编译器会创建一个隐式声明:

  • 隐式声明接受任意数量和类型的参数
  • 隐式声明返回int

因此,编译器假设 writePromptMessage 在它第一次看到它时返回 int,这是错误的,并且会导致一连串的其他错误。对于不返回 int 的函数,您必须永远不要使用隐式函数声明,对于返回 int 的函数,您不应该使用隐式函数声明。

关于objective-c - 为什么编译器会提示我的简单函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com