0

如何知道什么样的“事物”可以在 C 代码中跨越多行而不需要\行尾的字符?以及什么样的“事物”需要\?如何知道?例如,在下面的代码中,如果我将它们分成多行if,则工作正常。printf()

 if
  (2<5)
   printf
      ("Hi");

但在下面的代码中,printf()需要一个\,否则显示错误:

   printf("Hi \
        ");

同样,以下显示没有错误的错误\

   char name[]="Alexander the \
               great of Greece";

所以请告诉我如何知道何时\在 C 代码中使用跨越多行的 while,以及何时可以不使用它?我if的意思是,无论有无\.

4

3 回答 3

7

这是关于一个称为“令牌”的概念。标记是编译器不会分解为组件元素的源程序文本。文字 ( 42, "text")、变量名、关键字是标记。

结束行转义对字符串常量很重要,只是因为它分解了一个标记。在您的第一个示例中,换行符不拆分标记。标记之间的所有空白符号都将被忽略。

例外是宏定义。宏定义以换行符结束,因此您需要对其进行转义。但宏不是 C 代码。

于 2013-05-15T16:35:48.797 回答
1

如果你想跨行打破一个字符串,你可以使用 \ ,因为你有......

printf("Hello \
    World");

或者,或者,您可以用 " 终止字符串,然后在下一行开始一个新字符串,没有标点符号......

printf("Hello "
    "World");

据我所知,线的问题仅适用于两个地方……在字符串中和在定义中……

#define MY_DEFINE(fp) \
   fprintf( fp, "Hello "\
       "World" );

简而言之,\ 字符告诉编译器该语句在下一行继续。但是,C/C++ 不依赖于空格,所以实际上唯一会出现的地方是在预期位于单行的语句......这将是一个字符串或一个定义。

于 2013-05-15T16:33:59.973 回答
0

C 不依赖于换行。

你可以在任何你喜欢的地方使用换行符,也可以根本不使用它们。

这意味着将字符串文字视为一个标记。

但是,就像在现实生活中一样:太多或太少,两者都会让生活变得困难。幸福是平衡的问题... :-)


请注意,以 a 开头的行#不是C代码,而是预处理器指令。

于 2013-05-15T16:41:41.690 回答