여러 줄의 인쇄 문을 주석 처리하는 빠르고 쉬운 방법이 있습니까? 이 같은?
printf("3387 strings_line_tokens[lower_bound_of_big_boy_counter] %s \n",
strings_line_tokens[lower_bound_of_big_boy_counter]);
나는 주로 세 개를 가지고 있고 산발적으로 네 번째를 가지고 있습니다.
printf("3402 checking return stuff \n");
printf("3408 strings_line_tokens[lower_bound_of_big_boy_counter] %s \n",
strings_line_tokens[lower_bound_of_big_boy_counter]);
printf("3410 function_type_for_proper_return %s \n", function_type_for_proper_return);
이번이 네 번째 산발적 사건이다. 때로는 %c
if 문이나 while 루프가 예상대로 작동하지 않는 이유를 찾는 데 유용합니다.
printf("2340 symbol_table_variables[i][1] is %s.\n", symbol_table_variables[i][1]);
printf("2341 symbol_table_variables[i][2] is %c.\n", symbol_table_variables[i][2][0]);
더 복잡해 지세요 :). 이 두 가지 유형의 인쇄 명세서를 별도로 보관할 수 있습니까?
printf("2434 REJECT\n");
printf("2534 ACCEPT\n");
답변1
"다음 멤버를 처리한다"고 말하는 것은 의미가 없습니다.이것한 가지 방식으로 그룹화되어 처리됨 이 다른 그룹다른 방법으로 변경하세요. "한 그룹을 한 가지 방식으로 처리하고 다른 모든 그룹은 다른 방식으로 처리하도록 지정해야 합니다. 따라서 귀하가 원하는 것으로 가정합니다.모두 printf
주석 처리된 명령문을 제외하고 다음 중 하나와 유사합니다.
printf("2434 REJECT\n");
printf("2534 ACCEPT\n");
따라서 "간단한" 솔루션은 다음과 같습니다.
awk '
/printf/ { comment=1 }
/printf\("[0-9]* REJECT/ { comment=0 }
/printf\("[0-9]* ACCEPT/ { comment=0 }
{ if (comment) printf "//"
print }
/;/ { comment=0 }
'
그 기능은 다음과 같습니다.
- 포함된 line 을 볼 때마다 플래그를
printf
설정합니다 .comment
(이것은fprintf
및 에 대한 통화 호출 과 일치합니다sprintf
. 또한 일치합니다.논평그리고끈printf
예를 들어 ;라는 단어가 포함되어 있습니다 ./* 이 printf는 if 문이 무엇을 하는지 알아내는 데 사용됩니다. */
좀 더 구체적으로 작성해야 하는 경우 조정하세요. ) printf
그런 다음 숫자 문자열과 공백,REJECT
orACCEPT
가 뒤따르는 것으로 밝혀지면떠나다이는comment
이러한 명령문이 주석 처리되는 것을 원하지 않기 때문입니다. 이 정규 표현식은 약간 광범위하다는 점에 유의하세요.임의의 숫자숫자(단지 4개가 아님)를 입력하고 해당 단어가 줄의 마지막 단어인지 확인하지 않습니다. 좀 더 구체적으로 설명해야 하는 경우 조정하세요.- 그런 다음 각 입력 줄에 대해 두 줄의 코드 블록을 실행합니다.
- 이 플래그가 설정 되면 행을 주석 처리하기 위해 가
comment
기록됩니다 . C에서와 마찬가지로 in은//
자동 으로 개행 문자를 쓰지 않습니다.awk
printf
- 그런 다음 각 행에 대해 해당 행을 씁니다. (
awk
에print
명시됨하다끝에 개행 문자를 자동으로 씁니다. 기본값은 입력 줄을 출력에 쓰는 것입니다. ) 따라서 이것은 입력 라인을 출력에 기록하고 (특수 사례 중 하나가 아닌) 명령문//
의 일부인 경우 주석을 달습니다.printf
- 이 플래그가 설정 되면 행을 주석 처리하기 위해 가
- 그런 다음 세미콜론이 보이면 플래그를 끕니다
comment
. 이를 통해comment
여러 줄의 명령문을 처리하는 동안 플래그가 설정된 상태로 유지됩니다.printf
그렇기 때문에printf
문자열에 세미콜론을 포함하지 않는 것이 중요합니다.awk
스크립트가 세미콜론을 문의 끝으로 착각하기 때문입니다.
예를 들어 입력의 경우
cmp_str9 = strcmp("return", strings_line_tokens[lower_bound_of_big_boy_counter]);
printf("4006 lower_bound_of_big_boy_counter %d\n", lower_bound_of_big_boy_counter);
printf("4007 strings_line_tokens[lower_bound_of_big_boy_counter] %s\n",
strings_line_tokens[lower_bound_of_big_boy_counter]);
if (cmp_str9 == 0)
{
printf("2534 ACCEPT\n");
printf("3402 checking return stuff\n");
return_match_flag = 1;
}
이 출력을 생성합니다
cmp_str9 = strcmp("return", strings_line_tokens[lower_bound_of_big_boy_counter]);
// printf("4006 lower_bound_of_big_boy_counter %d\n", lower_bound_of_big_boy_counter);
// printf("4007 strings_line_tokens[lower_bound_of_big_boy_counter] %s\n",
// strings_line_tokens[lower_bound_of_big_boy_counter]);
if (cmp_str9 == 0)
{
printf("2534 ACCEPT\n");
// printf("3402 checking return stuff\n");
return_match_flag = 1;
}
원하는 출력이 무엇인지 정확하게 설명하지 않았습니다. 각 줄의 시작 부분에 이를 배치하면 //
코드를 주석 처리하는 쉬운 방법입니다. /*
첫 번째 줄 앞과 */
마지막 줄 뒤에 넣는 것이 좋습니다 . /*…*/
주석 처리된 코드의 모든 스타일 주석이 주석을 종료하므로 자동화 스크립트에서는 이 작업을 수행하지 않는 것이 좋습니다 ( /*…*/
스타일 주석은 중첩되지 않기 때문). 확신하는찾다 */
주석 처리된 코드에서는 지저분해질 수 있습니다.
그러나 C 코드 블록을 주석 처리하는 또 다른 방법이 있습니다. 사이의 무엇이든
#if 0
그리고
#endif
컴파일러에 관한 한 기본적으로 소스 코드 파일에서 사라집니다. 이러면 폭발하겠지만겹치는
다른 전처리기( #…
) 블록과 함께 훌륭하게 중첩됩니다. 우리가 #if 0
글을 쓰기도 전에모든 printf
문, 그 #endif
이후에 인쇄 문 블록을 감지하는 것이 더 나을 것이라고 생각합니다. 그래서 나는 이것을 생각해 냈습니다.
awk '
/printf/ { starting_comment=1 }
/printf\("[0-9]* REJECT/ { starting_comment=0 }
/printf\("[0-9]* ACCEPT/ { starting_comment=0 }
{ if (starting_comment) {
starting_comment=0
if (in_a_comment==0) print "#if 0"
in_a_comment=1
}
if (in_a_comment==2) {
print "#endif"
in_a_comment=0
}
print
}
/;/ { if (in_a_comment==1) {
in_a_comment=2
}
}
END {
if (in_a_comment==2) {
print "#endif"
in_a_comment=0
}
}
'
아마도 이 블록은 실제로 필요하지 않을 것입니다 END
. 입력의 마지막 줄이 명령문인 경우에만 작동합니다 printf
. 물론 C 소스 코드 파일의 마지막 줄은 항상 }
.
위에 표시된 입력 예의 경우 이는 다음과 같습니다.
cmp_str9 = strcmp("return", strings_line_tokens[lower_bound_of_big_boy_counter]);
#if 0
printf("4006 lower_bound_of_big_boy_counter %d\n", lower_bound_of_big_boy_counter);
printf("4007 strings_line_tokens[lower_bound_of_big_boy_counter] %s\n",
strings_line_tokens[lower_bound_of_big_boy_counter]);
#endif
if (cmp_str9 == 0)
{
printf("2534 ACCEPT\n");
#if 0
printf("3402 checking return stuff\n");
#endif
return_match_flag = 1;
}
printf
처음 두 명령문이 어떻게 블록으로 결합되는지 확인하세요 .