явный тип отсутствует (предполагается "int") - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь разработать проект с IAR. вот сообщение об ошибке: Ошибка [Pe260]: явный тип отсутствует (предполагается «int»)

Привет.

Когда я пытаюсь: void send_data_byte (unsigned char dattt) {
я вижу новую ошибку: Ошибка [Pe159]: объявление несовместимо с предыдущей командой 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 ]

2 голосов
/ 29 марта 2019

Сообщение об ошибке указывает на то, что вы явно не объявляете какой-либо тип возвращаемого значения функции 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 голосов
/ 29 марта 2019

Вам необходимо явно объявить тип возвращаемого значения функции.В этом случае, если вам нечего вернуть, вы должны объявить его как void:

void send_data_byte(unsigned char dattt) {   
1 голос
/ 29 марта 2019

В старых версиях языка C до 1999 года существовало правило "неявного int". Если вы объявили функцию без указания типа возвращаемого значения, предполагается, что он вернет результат типа int. Стандарт 1999 года исключил это правило и сделал обязательным указание типа возврата в любом объявлении или определении функции. Многие компиляторы обслуживают старый код, разрешая такие объявления или диагностируя их с нефатальным предупреждением.

Даже в до-1999 C не было никакой реальной причины использовать правило "неявного int". Если функция возвращает результат int, вы всегда можете объявить его таким образом явно. ( Очень старый C, до 1989 года, не имел void, но поддержка C после 1989 года по существу универсальна.)

Что касается вашей другой ошибки:

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

это означает, что у вас есть два объявления, или объявление и определение, send_data_command, и они в некоторой степени различаются. В вашем вопросе есть только один случай send_data_command, поэтому вы не показали нам код, вызывающий эту ошибку. Убедитесь, что все ссылки на send_data_command в вашей программе согласованы, и убедитесь, что объявление - в частности, прототип (который указывает типы любых параметров) - отображается каждый раз, когда вы вызываете его.

(Кстати, ваш код было бы намного легче читать, если бы он был с отступом. Существуют автоматизированные инструменты, которые могут помочь вам в этом. Отступы должны отражать вложенную структуру вашего кода.)

...