相关疑难解决方法(0)

'#' - 字符必须位于C预处理器中的一行的开头吗?

我已经编程了C很长一段时间了.在这段时间里,我了解到在第一列放置预处理程序指令之前的"#"字符是一种常见的约定.

例:

 #include <stdio.h>

 int main(void) {
 #ifdef MACRO1
 #ifdef MACRO2
      puts("defined(MACRO1) && defined(MACRO2)");
 #else
      puts("defined(MACRO1)");
 #endif
 #else
      puts("!defined(MACRO1)");
 #endif
      return 0;
 }
Run Code Online (Sandbox Code Playgroud)

当人们缩进他们的预处理器指令时,他们通常会这样做:

 #include <stdio.h>

 int main(void) {
 #ifdef MACRO1
 # ifdef MACRO2
     puts("defined(MACRO1) && defined(MACRO2)");
 # else
     puts("defined(MACRO1)");
 # endif
 #else
     puts("!defined(MACRO1)");
 #endif
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我不认为我曾见过有人像这样格式化:

 #include <stdio.h>

 int main(void) {
 #ifdef MACRO1
  #ifdef MACRO2
     puts("defined(MACRO1) && defined(MACRO2)");
  #else
     puts("defined(MACRO1)");
  #endif
 #else
     puts("!defined(MACRO1)");
 #endif
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果C语言标准要求#-character应该在第一列.

那么上面的第三个选择是否合法?

如果以上所有案件都合法,那么我想知道这是否合法.

 #include <stdio.h>

 int main(void) { …
Run Code Online (Sandbox Code Playgroud)

c syntax conditional-compilation language-lawyer c-preprocessor

9
推荐指数
2
解决办法
1492
查看次数