对这本书感到有点困惑 "Programming in C" (斯蒂芬·科昌)



我一直在c编程中教自己。

我在Java中有背景,我对Stephen的书中编写的代码的方式感到有些疯狂。例如,以下代码,我评论了我的混乱。也许我在这里错过了一些重要的东西,所以我希望听到有关C

中正确编码方式的一些意见。
#include <stdio.h>
void test(int *int_pointer)
{
  *int_pointer = 100;
}
int main(void)
{
  void test(int *int_pointer);  // why call the test() function here without any real argument? what's the point?
  int i = 50, *p = &i;
  printf("Before the call to test i = %in", i);
  test(p);
  printf("After the call to test i = %in", i);
  int t;
  for (t = 0; t < 5; ++t)   // I'm more used to "t++" in a loop like this. As I know ++t is different than t++ in some cases. Writting ++t in a loop just drives me crazy
  {
    if (4 == t)  // isn't it normal to write "t == 4" ?? this is driving me crazy again!
        printf("skip the number %in", t);
    else
        printf("the value of t is now %in", t);
  }
  return 0;
}

//为什么在此处调用test()函数而没有任何真实参数?重点是什么?这不是呼叫,而是函数声明。在此位置完全不必要,因为该函数之前已定义几行。在现实世界中,这种声明不经常使用。

//我更习惯这样的循环中的" T "。据我所知,在某些情况下, t与T 不同。在循环中写入 t只是让我发疯在这种情况下,它们是等效的,但是如果您想到C ,最好将完全切换到 t形式,因为在某些情况下(例如,使用迭代器)会有所不同。

//写" t == 4"不正常?这让我再次发疯!有些人倾向于使用4 == t来避免使用t = 4而不是t == 4(两者在C为if条件下都是有效的)。由于所有普通编译器无论如何都会发出警告,因此4 == t是不必要的。

请阅读有关指针的信息,然后您将了解一个指向INT的指针已作为参数作为参数...

void test(int *int_pointer); 

您可以在此链接中看到++tt++之间的区别。在此代码中没有区别。结果将相同。

if(4 == t)if(t == 4)相同。只是书面不同的样式。4 == t主要用于避免键入=而不是==。如果您编写4 = t,编译器将抱怨,但是如果您写t = 4

,则不会抱怨

为什么在这里调用test()函数,没有任何真实参数?重点是什么?

此处将test声明为函数(带有void返回类型),该函数期望int类型A指针的参数。

我更习惯这样的循环中的" T "。据我所知,在某些情况下, t与T 不同。在循环中写入 t只是让我疯狂

请注意,在语句中增加或减少变量时(t++;++t)时,提前和提示后具有相同的效果。
当这些表达式出现在大或复杂的表达式中时,可以看到差异(int x = t++int x = ++t的结果与t的相同值具有不同的结果)。

写" t == 4"是否正常?这让我再次发疯!

4 == tt == 4更安全,尽管两者均具有相同的含义。如果使用t == 4,如果用户类型意外地t = 4,则编译器不会丢任何错误,并且您可能会获得错误的结果。在4 == t的情况下,如果用户意外键入4 = t,则编译器会通过您的警告:

 lvalue is required as left operand of assignment operator.

void test(int *int_pointer);是函数原型。在此特定实例中,这并不需要,因为该函数是在main()上方定义的,但是如果稍后在文件中定义了test,则您需要它(尽管不一定在功能正文中)。(有些人依靠隐式宣言,但我们不要在这里介入。)

++t永远不会比t++慢,因为从概念上讲,后者必须存储并返回上一个值。(尽管我不愿意依靠这一点,但大多数编译器都会优化副本,尽管我始终使用++t,但是很多经验丰富的程序员都不会。)

4 == t通常代替t == 4,以防您不小心省略了=之一。它很容易完成,但是一两天或两天来搜寻一个由单个=造成的错误,代替t = 40,您将永远不会再做一次!4 = t将生成编译误差,但t = 4实际上是值4的表达式,它将比较true分配4t的值与CC_45:特别危险的副作用。个人,尽管我发现 4 == t obfuscating。

相关内容

  • 没有找到相关文章

最新更新