LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1376|回复: 7

请问怎么解决编译带有C++注释风格的C程序?

[复制链接]
发表于 2004-3-30 15:40:11 | 显示全部楼层 |阅读模式
有个C程序里面含有大量这样的
  //注释内容
这种形式的注释,编译出错信息为:

...C++ style comments are not allowed in ISO C90
"
请问不修改程序能解决吗?文件太多不好一个个修改!
发表于 2004-3-30 16:45:49 | 显示全部楼层
你用的是什么编译器?我用gcc没有出现这个问题。
发表于 2004-3-31 09:36:12 | 显示全部楼层
自己写个程序搞定它啊。读取程序的每一行,如果是以//开头,就在这一行的两头加上/*和*/不就行了。正好又是一个练手的机会。
发表于 2004-3-31 11:09:59 | 显示全部楼层
使用bash脚本和sed即可写一个小脚本即可。
不超过20行代码。
发表于 2004-3-31 20:31:16 | 显示全部楼层
请看看错在那里,请指正!!
# cat tmp.filea
//abcd
//while
hello ,the world
// test program
/* comment*/
end

  1. # cat change_comment.c
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. int main( void )
  6. {
  7.     FILE *fp,*fd;
  8.     char buffer[8139];
  9.     int  count;
  10.     if((fd=fopen("tmp.fileb","w+"))<0) {
  11.            printf("open tmp.fila error\n");
  12.            return(1);
  13.     }
  14.     if((fp = fopen( "tmp.filea", "r" )) != NULL ) {
  15.            while( fgets( buffer, 80, fp ) != NULL ) {
  16.                   if(buffer[0] == '/' && buffer[1] == '/' ) {
  17.                           count=sizeof(buffer);
  18.                           buffer[count-1]='*' ;
  19.                           buffer[count]='/';
  20.                           buffer[count+1]='\n';
  21.                           buffer[1]='*' ;
  22.                   }
  23.                   fputs( buffer,fd );
  24.                   fputs( buffer,stdout);
  25.            }
  26.            fclose( fp );
  27.            fclose( fd );
  28.     }else {
  29.            printf("open tmp.filea error\n");
  30.            return(1);
  31.     }
  32.     printf("\n");
  33.     return(0);
  34. }
  35. # ./a.out
  36. /*abcd
  37. /*while
  38. hello ,the world
  39. /* test program
  40. /* comment*/
  41. end

复制代码
发表于 2004-3-31 21:21:27 | 显示全部楼层
777还有些情况没考虑进去。 正在解决:rolleyes:
发表于 2004-4-1 08:34:50 | 显示全部楼层
计算字符串的长度应该用strlen(),而不是sizeof()。
改成:

  1. count=strlen(buffer);
复制代码

再次执行,结果正常。
[kj501@s2023 c]$ ./a.out
/*abcd*/
/*while*/
hello ,the world
/* test program*/
/* comment*/
end
[kj501@s2023 c]$
发表于 2004-4-1 10:54:06 | 显示全部楼层
这样可以:
  1. cat  |sed 's/\([^/]*\)\/\/\(.*\)/\1\/\*\2\*\//'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表