【发布时间】:2014-11-08 18:46:08
【问题描述】:
以下 C 程序有一个函数 test(),尽管没有 return 语句,但它返回:
-
printf()格式的字符数 - 字符的 ASCII 值,如果单个字符以
printf()的格式存在 -
printf("")的其中一个参数的值。
没有return 语句的函数如何返回值以及结果的可变性?
#include <stdio.h>
#include <stdlib.h>
int test(int, int);
int main(int argc, char **argv)
{
printf("\n%d\n", argc);
if (argc > 1)
{
printf("\n%d\n", test(atoi(*++argv), 2));
printf("\n%d\n", test(2, atoi(*argv)));
}
return 0;
}
int test(int a, int b)
{
printf("0");
}
【问题讨论】:
-
未定义行为
-
它可能没有明确的返回值,但您正在返回一个值!编译器应该已向您发出警告,说明返回值未定义。
-
奇怪,我期待的是鼻恶魔
-
为什么还能编译?使用编译器警告并修复它们。