C 从printf调用另一个函数?
我正在做一个简单的挑战,来自一本关于C/Objective-C的书,我必须编写一个程序来计算和显示整数的平方,同时将数字放在引号中 我做了一个成功的程序,但我有两个问题。 首先,考虑到要减少代码量,为了练习代码的高效性和简洁性,我从C 从printf调用另一个函数?,c,C,我正在做一个简单的挑战,来自一本关于C/Objective-C的书,我必须编写一个程序来计算和显示整数的平方,同时将数字放在引号中 我做了一个成功的程序,但我有两个问题。 首先,考虑到要减少代码量,为了练习代码的高效性和简洁性,我从printf语句中调用了squareOfInteger函数。这是明智的吗?它起作用了,但我担心这可能是个坏习惯 另一件困扰我的事情是,我是否需要在变量number之前,在函数的参数中重复类型为int,或者是否足以声明结果为int类型,并在参数中省略类型,我已经在下面做
printf
语句中调用了squareOfInteger
函数。这是明智的吗?它起作用了,但我担心这可能是个坏习惯
另一件困扰我的事情是,我是否需要在变量number
之前,在函数的参数中重复类型为int
,或者是否足以声明结果为int
类型,并在参数中省略类型,我已经在下面做了
这是我的密码:
#include <stdio.h>
int squareOfInteger(number)
{
int square = number * number;
return square;
}
int main(int argc, const char * argv[]) {
int myNumber = 5;
printf("\"%d\" squared is \"%d\".\n", myNumber, squareOfInteger(myNumber));
return 0;
}
#包括
整数平方(数字)
{
整数平方=数字*数字;
返回广场;
}
int main(int argc,const char*argv[]{
int myNumber=5;
printf(“\%d\”的平方是\%d\”\n),myNumber,squareOfInteger(myNumber));
返回0;
}
我将非常感谢你的帮助
“我从printf语句调用了我的squareOfInteger函数。这是否可取?”
从函数内部调用函数没有错。这取决于具体情况,您说需要保留平方值(而不是只需要打印值)并对其执行其他操作。比如:
int value = myFun(100);
int nextVal = myNextFun(value);
困扰我的另一件事是,我是否需要在变量号之前,在我的函数的参数中重复类型为int,或者是否足以声明结果为int类型,并在参数中省略类型,我已经在下面做了
是的,您应该使用定义数字的类型(在您的情况下,默认情况下它将是整数类型,如果您有其他类型的数字,它将失败)作为最佳实践,因为它将使代码更清晰易读
我从printf语句调用了squareOfInteger函数。这是吗
但是明智吗?它起作用了,但我担心这可能不好
练习
从printf()
调用函数并不坏。但由于未指定printf()
中的求值顺序,因此可能存在导致未定义行为的场景。例如:
int func(int *p)
{
*p =30;
}
int main()
{
printf("%d %d",num,func(&num));
return 0;
}
这里您正在调用func()
并打印num
的值,这样您就有了UB
是否足以将结果声明为int类型,以及
在参数中省略类型
如果未指定参数的类型,则默认为
int
。但提及参数的类型总是好的。“…高效且简洁…”-删除该函数,它不会给您带来任何好处。至于参数:在标准模式下编译,并启用警告(-std=c99-Wall-Wextra-pedantic
,例如gcc或clang)。如果函数返回值与printf
格式匹配,则可以。但是不要期望这会提高程序的性能,你是对的。我意识到我可以在main()下完成所有工作,但我这样做是为了练习在main()之外编写自己的函数,然后调用它们。那不是。严格地说,你要做的是——用一个参数调用printf,这个参数是函数调用的结果。顺便说一句,总的来说这很好。太好了!非常感谢你澄清这一点,彼得。我想我是这样表述和思考的,因为我认为printf是一个“语句”而不是一个“函数”。在这种情况下,重要的区别是肯定的!谢谢你,戈皮。那么,在参数中指定函数应采用的参数类型是否更好?这是一个好的做法吗?@shinnyWhack是的,绝对是最好的方法,正确的方法感谢阿尔玛斯提供的额外信息。