C 从printf调用另一个函数?

C 从printf调用另一个函数?,c,C,我正在做一个简单的挑战,来自一本关于C/Objective-C的书,我必须编写一个程序来计算和显示整数的平方,同时将数字放在引号中 我做了一个成功的程序,但我有两个问题。 首先,考虑到要减少代码量,为了练习代码的高效性和简洁性,我从printf语句中调用了squareOfInteger函数。这是明智的吗?它起作用了,但我担心这可能是个坏习惯 另一件困扰我的事情是,我是否需要在变量number之前,在函数的参数中重复类型为int,或者是否足以声明结果为int类型,并在参数中省略类型,我已经在下面做

我正在做一个简单的挑战,来自一本关于C/Objective-C的书,我必须编写一个程序来计算和显示整数的平方,同时将数字放在引号中

我做了一个成功的程序,但我有两个问题。 首先,考虑到要减少代码量,为了练习代码的高效性和简洁性,我从
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是的,绝对是最好的方法,正确的方法感谢阿尔玛斯提供的额外信息。