我正在做一个简单的程序,它应该计算三元运算符的出现次数?:在C源代码中。我试图尽可能简化这一点。所以我从源代码中过滤了这些东西:
现在我只计算问号的出现。
所以我的问题是:是否有任何其他符号,操作符或其他任何可能导致问题的内容 - 包含'?' ?
让我们假设源语法有效。
答案 0 :(得分:4)
我认为你找到了引入问号的所有地方,因此消除了所有可能的误报(对于三元操作)。但是也许你消除了太多:也许你想要计算那些由宏引入的“?:”;你不算这些。这是你想要的吗?如果是这样,你就完成了。
答案 1 :(得分:3)
在预处理的源代码上运行您的工具(您可以通过运行gcc -E
来获取此代码)。这将完成所有宏扩展(以及#include
替换),并消除所有三元组和注释,因此您的工作将变得更加容易。
答案 2 :(得分:-1)
在K& R ANSI C中,唯一可以有效发生问号的地方是:
现在您可能会注意到此列表中缺少宏和三字符序列。
我没有包含三字符序列,因为它们是编译器扩展而不是“有效C”。我并不是说你应该从你的程序中删除支票,我试图说你已经进一步了解了ANSI C所需要的。
我也没有包含宏,因为当你在讨论宏中可能出现的字符时,你可能意味着两件事:
?字符不能出现在宏标识符中(http://stackoverflow.com/questions/369495/what-are-the-valid-characters-for-macro-names),我将宏体视为常规C代码,因此第一个列表(字符串文字,字符常量和注释*)也应该涵盖它们。
*宏可以有效地包含注释吗?因为如果我使用它:
#define somemacro 15 // this is a comment
然后// this is a comment
不是宏的一部分。但是如果我用-D somemacro="15 // this is a comment"
编译这个C文件怎么办?