| Автор |
Съобщение |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 PIC C18 - Warning [2058] call of function without prototype
Това вече от доста време ме тормози и не мога да разбера какво става. Дава ми "call of function without prototype", но само на някои функции от header file-a: Извиквам функиите така: Дава ми warning САМО на initBacklight(). На другите 2 не дава. Всъщност на никоя друга функция не дава warning. lcd.h e: Тялото на initBacklight():
|
| Нед Ное 11, 2012 12:38 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
 Re: PIC C18 - Warning [2058] call of function without protot
void initBacklight(void);
void initBacklight(void) { }
|
| Нед Ное 11, 2012 1:22 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: PIC C18 - Warning [2058] call of function without protot
първото е в header file-a. за initLcd() не дава тази грешка, а са декларирани по същия начин
|
| Нед Ное 11, 2012 4:31 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: PIC C18 - Warning [2058] call of function without protot
За C++ и някои C компилатори е различно от Принципно ако не декларираш explicit функцията като void а просто я декларираш () компилатора приема implicit, че тя има един int параметър - т.е. става PIC C компилаторите са малко особенни, скоро се борих с едни Hitech C за PIC - мамата ми се разката докато изчистя всички warnings ... например Имаше и други простотии, ама не ми се пише в момента ...
_________________ Мразя да мразя ...
|
| Нед Ное 11, 2012 5:26 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: PIC C18 - Warning [2058] call of function without protot
 ))) Мерси! Имам някакво усещане, че това не е правилно, но ти го казваш така като че ли е стандарт. Явно някой едно време го е решил така и после някой друг е обявил първия за кретен и го е махнал... а Микрочип (както и аз) не са чували за този втория и затова си карат по тъпия начин.
|
| Нед Ное 11, 2012 10:49 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 Re: PIC C18 - Warning [2058] call of function without protot
"Принципно ако не декларираш explicit функцията като void а просто я декларираш () компилатора приема implicit, че тя има един int параметър - т.е. става "
Това пък къде си го гледал? По принцип понякога не си слагам void при декларациите но не съм забелязал в асемблерските листинги нещо нередно. Не ми се вижда и логично да е така.
|
| Нед Ное 11, 2012 10:56 pm |
|
 |
|
perlsite
Ранг: Ориентиран
Регистриран на: Пон Апр 17, 2006 1:44 pm Мнения: 291
|
 Re: PIC C18 - Warning [2058] call of function without protot
Поне на теория (дотолкова, доколкото стандарта се спазва): в "С": void funct (void) - фунция неочакваща входни аргументи; void funct () - функция очакваща произволен брой аргументи от неопределен тип;
в "С++": void funct (void) - фунция неочакваща входни аргументи; void funct () - фунция неочакваща входни аргументи, т.е. еднакво с горния ред.
|
| Пон Ное 12, 2012 2:19 am |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: PIC C18 - Warning [2058] call of function without protot
Така е като се пише по памет - получават се глупости ... извинявам се.
На функции без прототип в C, компилатора прави прототип от рода на int fn(); т.е. функцията връща int и се опитва да познае какви са параметрите според употребата и. ( не както е останало в дебелата ми глава че има подразбиращ се инт параметър )
Малко по особен е случая като има декларация от рода на type fn(); - това се води декларация, но не прототип - прототип е когато се укажат точно параметрите. В C89/90 не ти трябва нито прототип, нито декларация за да се компилира (това разбира се не значи, че трябва да се прави така), в C99 е задължително преди извикване функцията да е декларирана, но не е задължително да има прототип.
Т.е. в примера се декларира функция, но не и се прави прототип - затова и има варнинг.
_________________ Мразя да мразя ...
|
| Пон Ное 12, 2012 2:02 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: PIC C18 - Warning [2058] call of function without protot
@Nikola Kirov Не знам какво си мисли компилатора, но поне за C18 като сложа void в скобите спира да ми дава warning. За мен това е достатъчно. Дали по подразбиране решава че има 1 инт параметър - не знам, но не работи както трябва без (void) ... понякога.
|
| Пон Ное 12, 2012 6:13 pm |
|
|