ios - #define 指令上的这个错误是什么?

标签 ios objective-c c-preprocessor directive

<分区>

我在代码中有以下行:

#define INACTIVITYTIMEBEFOREBAITARROWDISPATCHED 60.0

我在这一行上收到一条错误消息,上面写着,方法调用的参数太多,预期 1,有 2

我是否超过了最大长度?如果可以,最大长度是多少?无论如何,实际的信息似乎很荒谬。

根据请求,这里是上下文:

#define VITALITYSECONDS 40.0
#define MINIMUMSCALEFACTOR 0.10
#define MINIMUMSPEED 2.0
#define INACTIVITYTIMEBEFOREBAITARROWDISPATCHED 60.0

#pragma mark - Angle and Distance Functions

-(float)normalizeAngle:(float)angle
{
   float answer;
   // Take an angle and return a value from -pi to pi
   // To do this, we first add pi, then divide by 2pi, then take fractional part, then multiply by 2pi then subtract pi.
   answer = angle + M_PI;
   answer = answer/(2*M_PI);
   answer = answer - floor(answer);
   answer = answer * 2 * M_PI;
   answer = answer - M_PI;
   return answer;
}

为了完整起见,这里是有问题的行:

[self helpText:@"Bait arrow dispatched due to %f seconds inactivity\n",INACTIVITYTIMEBEFOREBAITARROWDISPATCHED];

这是更正后的版本:

[self helpText:[NSString stringWithFormat:@"Bait arrow dispatched due to %f seconds inactivity\n",INACTIVITYTIMEBEFOREBAITARROWDISPATCHED]];

这是该方法的声明:

-(void)helpText:(NSString *)text

方法 helpText 只是一种在屏幕上显示内容以帮助测试人员的临时方法。

最佳答案

提示 1:

在有问题的行上方,添加

#undef INACTIVITYTIMEBEFOREBAITARROWDISPATCHED

这只是为了防止您在其他地方以不同方式定义该宏,而现在由于双重定义而得到奇怪的结果。尽管我必须承认在那种情况下错误消息应该有所不同 - 我认为仍然值得一试。

提示 2:

如果不需要,不要为常量使用预编译器宏(定义)。在少数情况下,定义是有意义的,而给定的没有出现在其中之一。

用适当的静态常量标量替换所有这些定义;

例如

static const double kInactivityTimeBeforeBaitArrowDispatched 60.0;

这将带来类型安全、可读性良好的代码和更少的头部划痕。

关于ios - #define 指令上的这个错误是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062441/

相关文章:

ios - 在 Objective-C iOS 中替换去电屏幕

objective-c - 滑动 UITableViewCell

c - '#' 字符是否必须位于 C 预处理器中一行的开头?

C 预处理器指令错误

Objective-C:协议(protocol)

c - 拒绝指针的数组大小的宏

ios - 使用下载的 Swift/图像数组

ios - 如何过滤文字?

ios - 为什么 RPBroadcastPickerView 呈现空白屏幕?

ios - 如何处理长文本UILabel