Article View: pl.comp.lang.c
Article #309571Re: Błąd kompilacji: Control reaches end of non-void function
From: Wojciech Muła
Date: Tue, 02 Jan 2018 22:20
Date: Tue, 02 Jan 2018 22:20
33 lines
2348 bytes
2348 bytes
On Tuesday, January 2, 2018 at 9:52:30 PM UTC+1, Maciek wrote:
> Mam funkcję która zwraca wskaźnik stosu, jak mogę ją poprawić lub ominąć błąd kompilacji:
>
> Control reaches end of non-void function
>
> funkcja:
>
> unsigned long sp(void) {
> asm("movl %esp, %eax");
> }
To jest niepoprawny program, bo zapisujesz do eax, a nie
mówisz kompilatorowi, że modyfikujesz ten rejestr.
Mniej więcej tak jest OK asm("mov %esp, %eax") : : : "eax"),
ale najlepiej unikać podawania rejestrów wprost.
Zrób jak człowiek:
unsigned long sp() {
unsigned long result;
asm("movl %%esp, %0" : "=r" (result));
return result;
}
Pod %0 kompilator wstawi co mu będzie pasowało, Ty jedynie
piszesz, że chcesz żeby Ci to "result"; gcc -O2 generuje
najkrótszy możliwy program:
movl esp, rax
ret
w.
Technical Details
Message-ID:
<389bedb5-4a18-4d3c-99bc-cc975f9de2cf@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!g35no5755558qtk.1!news-out.google.com!t48ni2301qtc.1!nntp.google.com!g35no5755553qtk.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<12c62252-1856-414e-9237-61a257bf9d99@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.200.6.208 with SMTP id j16mr33377823qth.20.1514931613528; Tue, 02 Jan 2018 14:20:13 -0800 (PST) X-Received: by 10.31.48.2 with SMTP id w2mr856723vkw.13.1514931613041; Tue, 02 Jan 2018 14:20:13 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!g35no5755558qtk.1!news-out.google.com!t48ni2301qtc.1!nntp.google.com!g35no5755553qtk.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Tue, 2 Jan 2018 14:20:12 -0800 (PST) In-Reply-To: <12c62252-1856-414e-9237-61a257bf9d99@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2a01:112f:80d:ee00:d6be:d9ff:fe09:8928; posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn NNTP-Posting-Host: 2a01:112f:80d:ee00:d6be:d9ff:fe09:8928 References: <12c62252-1856-414e-9237-61a257bf9d99@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <389bedb5-4a18-4d3c-99bc-cc975f9de2cf@googlegroups.com> Subject: Re: Błąd kompilacji: Control reaches end of non-void function From: Wojciech Muła <wojciech_mula@poczta.onet.pl> Injection-Date: Tue, 02 Jan 2018 22:20:13 +0000 X-Received-Body-CRC: 3729447379 X-Received-Bytes: 2368 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit