在分号之前使用换行符好吗?

时间:2017-04-13 09:11:45

标签: c ubuntu-16.04

我是C编程的新手。我写了一个Basic C代码 像

#include<stdio.h>
main()
{
    int t = 
5
;
    printf("%d\n",t
);
}

是否会产生错误?

好吧,我的任务就像是

int x = 9;

int x = //Finish this instruction in 3 lines instead of one!
9
;

两者都是正确的?我可以使用多行

结束指令

3 个答案:

答案 0 :(得分:3)

澄清了问题后的重写答案。

是的,分号的位置并不重要。空格(空格,换行符,制表符)通常在C中不重要。它不是面向行的语言,源代码必须严格地构造成行。有线,但它们并不是很重要。几乎总是可以在不改变代码含义的情况下将换行符更改为空格(甚至删除)。

这些都是等价的:

int x = 1;

int y=1;

int z=1          ;

int
w
=
1
;

您应该查看一些Obfuscated C entries,了解如何将其用于创造性效果。

答案 1 :(得分:1)

在ANSI C标准之前的旧K&amp; R天,任何函数或变量的默认类型都是int所以你可以(和人们经常这样做)在声明中省略类型说明符是int。这是惯用的,特别是在main()函数的情况下(Even&#34; C编程语言第二版&#34;使用惯例,即使它据称基于ANSI C)。还没有void类型,因此您无法指定函数不返回任何内容。函数总是返回一些东西,即使它是垃圾值。

从(我认为)C99开始,决定将类型默认为int是一个非常糟糕的主意,因此从技术上讲是不允许的。但是,为了向后兼容,编译器只会在遇到它时发出警告。

您可以使用

使警告静音
int main(void)

int main(int argc, char*argv[])

这是两个&#34;官方&#34; C11中的便携式定义。

虽然您不在,return,但您不需要在main中指定return 0; 声明,但这样做是很好的做法。添加

main

intmain函数的末尾。

修改

在我写答案时,问题已经改变了。

关于在问题中跨行分割语句。就编译器而言,这样做没有问题。白色空间(空格,制表符,换行符,换页符)在C中并不重要。唯一需要它的地方是它会使两个令牌运行到一个例如int/* blah */foo = 5; 显然无法正常工作,并且每个空格都是合法的,因此任何数量的空白都是合法的。

评论几乎可以出现在任何可以放置空格的地方。例如

NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"dd/mm/yyyy HH:mm:ss"];
NSDate *date = [formatter dateFromString:@"19/01/2016 14:16:03"];
NSCalendar *gregorian = [NSCalendar currentCalendar];
NSDateComponents *comonents =
[gregorian components:(NSCalendarUnitDay | NSCalendarUnitMonth |  NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond
                       ) fromDate:date];
NSInteger day = [comonents day];
NSInteger month = [comonents month];
NSInteger year = [comonents year];
NSInteger hour = [comonents hour];
NSInteger minutes = [comonents minute];
NSInteger seconds = [comonents second];

合法

答案 2 :(得分:-1)

在C中你的do函数声明:

int main(int argc, char **argv)

int - &gt;返回函数的类型。此函数将返回一个整数

主要 - &gt;函数的名称(这里是程序的主要功能)

(int argc,char ** argv) - &gt; paranthesis,显示它的功能,以及功能的参数;它需要什么作为输入。

只是很少有建议不在新行上写分号这是一个不好的做法