缺少显式类型(假定为“ int”)

时间:2019-03-29 19:08:24

标签: c iar

我正在尝试与IAR合作开发一个项目。 这是错误消息: 错误[P​​e260]:缺少显式类型(假定为“ int”)

致谢。

当我尝试时: void send_data_byte(unsigned char dattt){
我看到一个新错误: 错误[P​​e159]:声明与先前的“ send_data_command”不兼容

我的sen_data_command函数在下面

send_data_byte(unsigned char dattt){  
   for(j=0;j<8;j++){  
 pwmstart(1);  
 pwmstop(18);  
  if(dattt & 0x01){  
    __delay_cycles(1687);
  dattt=dattt>>1;  
  }  
 else  
  {  
 __delay_cycles(562); 
   dattt=dattt>>1;  
  }  
  }  
 pwmstop(1);  


  }  
  void send_data_command(unsigned char dat){  

 for (int r=0;r<160;r++)
   {pwmstart(1);}  
 for (int y=0;y<80;y++)
   {pwmstop(1);} 
  send_data_byte(dat);  
  repeat();  
  }  

3 个答案:

答案 0 :(得分:2)

您需要显式声明函数的返回类型。在这种情况下,如果您没有退货,则应将其声明为void

void send_data_byte(unsigned char dattt) {   

答案 1 :(得分:2)

该错误消息表明,您未明确声明函数send_data_type的任何返回类型。并且建议在int之前放置send_data_type。错误消息建议您以以下方式编写:

int send_data_byte(unsigned char dattt) {   

如果您不需要返回任何内容,也可以编写声明该函数为void的方法。

void send_data_byte(unsigned char dattt) {   

您的代码还有一个错误,就是您在函数send_data_byte中没有声明j。代码的以下部分

send_data_byte(unsigned char dattt){  
for(j=0;j<8;j++){ 

应该是

send_data_byte(unsigned char dattt){  
int j;
for(j=0;j<8;j++){ 

答案 2 :(得分:1)

在1999年之前的C语言的旧版本具有“隐式int”规则。如果在未指定返回类型的情况下声明了函数,则将假定它返回类型为int的结果。 1999年的标准删除了此规则,并强制在任何函数声明或定义上指定返回类型。许多编译器通过允许这样的声明或通过使用非致命警告来诊断它们来迎合旧代码。

即使在1999年以前的C中,也没有真正的理由利用“隐式int”规则。如果函数返回一个int结果,则始终可以用这种方式明确声明。 (非常的C,在1989年以前没有void,但现在对1989年以后的C的支持现在基本上已经普及了。)

关于其他错误:

Error[Pe159]: declaration is incompatible with previous "send_data_command"

它表示您有两个send_data_command的声明,或者一个声明和一个定义,它们在某些方面有所不同。您的问题中只出现send_data_command,因此您没有向我们显示导致该错误的代码。确保程序中对send_data_command的所有引用都是一致的,并确保每次调用时都可以看到一个声明-特别是原型(指定任何参数的类型)。

(顺便说一句,如果缩进正确,您的代码将更容易阅读。有自动工具可以帮助您做到这一点。缩进应反映代码的嵌套结构。)