我试图调用自编函数而不处理它的返回值.gcc在函数调用行告诉我,这将是一个无效的语句.为了检查我的函数是否被调用,我添加了一些printf语句,但没有从程序中获得任何输出.
gcc是否可以忽略函数调用?据我所知,这些陈述从来没有任何问题.
所以这是代码:
unsigned strlen(char *string)
{
printf("ignored by gcc");
unsigned count = 0;
for(; *string++; count++);
return count;
}
int main()
{
char string[] = "something";
strlen(string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
忽略函数的返回值是完全合法的.你可能在你调用的时间超过99%printf()(返回一个int).
但是,正如几位人士在评论中所说,您strlen()在标准库函数之后调用了函数.根据C99的7.1.3:2,这是非法的:
如果程序在保留它的上下文中声明或定义标识符(除了7.1.4允许的标识符),或者将保留标识符定义为宏名称,则行为是未定义的.
这里编译器意外地发出警告,要么调用标准函数而不是你的函数,要么根本不调用任何函数(因为它知道它 strlen()应该没有副作用).这是未定义行为可以做的事情之一.