我想打印評論給一個給定的程序打印在控制檯?如何在給定的程序中打印評論?
在程序中是否有任何函數和任何自己的邏輯來打印註釋?
例如
int main()
{
/* this is a comment */
}
上述程序只有一個評論我想打印此評論由特定邏輯或任何功能到控制檯,如果在C 3
我想打印評論給一個給定的程序打印在控制檯?如何在給定的程序中打印評論?
在程序中是否有任何函數和任何自己的邏輯來打印註釋?
例如
int main()
{
/* this is a comment */
}
上述程序只有一個評論我想打印此評論由特定邏輯或任何功能到控制檯,如果在C 3
您需要編寫一個程序來讀取c源文件,並在這些文件中標識和打印註釋。
#include <stdio.h>
void read_until_char (FILE *f, char c) {
// read file until c is found
}
void read_until_char_into (FILE *f, char c, char *buf) {
// read file until c is found
// also write each char read into buffer
}
void print_comments(const char *filename) {
FILE *f = fopen(filename, "r");
char buffer[2048];
int c;
if (f) {
while (!feof(f)) {
read_until_char(f, '/');
c = fgetc(f);
if (c == '*') {
while (!feof(f)) {
read_until_char_into(f, '*', buffer);
if ((c=fgetc(f)) == '/') {
// print buffer
break;
} else if (c == '*') {
// consider what to do if c is *
}
}
} else if (c == '/') {
read_until_char_into(f, '\n', buffer);
// print buffer
}
}
fclose(f);
}
}
This是一個awk腳本,可以從您的源代碼文件中提取註釋。
編譯後的C程序無法訪問自己的源代碼將無法打印註釋。註釋由C預處理器刪除,甚至編譯器也看不到。換句話說,一旦程序可執行,評論文本就不可用。
這就是爲什麼你的方法必須以某種方式直接處理源代碼,你不能在運行時爲程序本身執行此操作。
請參考How can I delete all /* */ comments from a C source file?,然後在生成的文件和原始文件之間進行差異化。
這是一種程序,稱爲Quine
C的例子:
main(){char *c="main(){char *c=%c%s%c;printf(c,34,c,34);}";printf(c,3
4,c,34);}
或許你可以反轉您的問題。爲什麼不使用字符串(可以打印)作爲註釋?評論意見是
字符串文字具有這兩個特徵。
因此
void a_function()
{
docstring = "This string is a comment. Blah blah.";
printf("DOC %s", docstring);
}
(Python有一個very similar convention,而這正是我得到的名稱爲 「文檔字符串」)。
我對這個問題非常困惑,如果你想打印每一個評論,爲什麼不使用字符串而不是評論?或兩者?爲什麼你需要打印你的程序的評論?只是想知道,因爲我不確定你在這裏做什麼,也許有更好的方法來實現你正在嘗試做的事情。
請問printf("/*foo*/");
不行嗎?或者你是否試圖使這種自動?
如果是後者,則需要讓程序解析源文件並搜索註釋(除非有其他更簡單的方法)。
我建議你只讀char字符的C文件,直到遇到/*
並開始用每個char填充數組,直到下一次出現*/
。
如果因任何原因,你所遇到的問題是前者,你不能因爲某些原因打印這裏printf
評論是我寫的做一個註釋字符串(很沒有意義的,因爲我99%確定的函數你可以使用printf("/*foo*/")
。
int printcomment(const char *comment)
{
char *commentln, open[] = "/*", close[] = "*/";
if(!(commentln = malloc(strlen(comment) + 5))) return 0;
strcat(commentln, open);
strcat(commentln, comment);
strcat(commentln, close);
printf("%s", commentln);
free(commentln);
return 1;
}
祝你好運。
這裏是一個Java版本,提取單和多行註釋(未進行詳盡測試)。
public void showComments(String fileName) {
StringBuffer sb = new StringBuffer();
FileReader br = null;
try {
br = new FileReader(fileName);
int ch = -1;
boolean singleLineComment = false;
boolean multiLineComment = false;
char prev = (char)ch;
while ((ch = br.read()) != -1) {
if (ch == '/' && prev == ch && !singleLineComment) {
singleLineComment = true;
} else if (ch == '*' && prev == '/' && !multiLineComment) {
multiLineComment = true;
} else if (ch == '\n' && singleLineComment) {
System.out.println(sb.toString());
singleLineComment = false;
sb = new StringBuffer();
} else if (ch == '/' && prev == '*' && multiLineComment) {
System.out.println(sb.toString());
multiLineComment = false;
sb = new StringBuffer();
} else if (multiLineComment || singleLineComment) {
sb.append((char)ch);
}
prev = (char)ch;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
舊的'printf()'? –
雅使用printf將是必要的,但如何做到這一點? – kTiwari
雅我試圖在C的文件處理的幫助下做到這一點,但沒有像我想做的那樣。 – kTiwari