您沒有編譯啓用了警告的程序,這就是爲什麼它有未定義的行爲。始終啓用警告和警告設置錯誤編譯:
% gcc test.c -Wall -Werror
test.c:3:6: error: return type of ‘main’ is not ‘int’ [-Werror=main]
void main() {
^
test.c: In function ‘main’:
test.c:8:18: error: implicit declaration of function ‘reverse’
[-Werror=implicit-function-declaration]
printf("%d", reverse(n));
^
test.c: In function ‘reverse’:
test.c:19:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
cc1: all warnings being treated as errors
爲什麼你看到0
末從int reverse()
的未定義返回值被打印出來。
由於不是從被聲明爲返回int
函數返回值是不確定的行爲,輸出可能也已經21-325987789234
或21[2] 31941 segmentation fault (core dumped) ./a.out
。
你的程序需要3個修正:
main
返回int
- 使
reverse
回報void
,並事先聲明。
- 請勿嘗試
printf
反向返回值。
因此我們得到
#include <stdio.h>
void reverse(int);
int main() {
int n;
printf("Enter n: ");
scanf("%d", &n);
printf("%d in reverse order is ", n);
reverse(n);
printf("\n");
}
void reverse (int n) {
int r;
do {
r = n % 10;
printf("%d", r);
n = n/10;
} while(n > 0);
}
如果你不是想返回,如果你扭轉n
數字,你得到的數字,那麼你可能不應該在reverse
打印任何東西。
請得到一本更好的指導書。 ['void main'錯誤](http://c-faq.com/ansi/voidmainbooks.html)。 –
@Am_I_Helpful有更多的問題,程序是未定義的,因爲它聲明瞭返回的值,但實際上並沒有返回任何東西 – 4pie0
如果你的老師讓你寫'void main',你應該把它們引用到上面鏈接的頁面上。 –