我一直在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);
您可以在此链接中看到++t
和t++
之间的区别。在此代码中没有区别。结果将相同。
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 == t
比t == 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 = 4
0,您将永远不会再做一次!4 = t
将生成编译误差,但t = 4
实际上是值4的表达式,它将比较true
和分配4
与t
的值与CC_45:特别危险的副作用。个人,尽管我发现 4 == t
obfuscating。