我正在开始一个将用 python 编写的解释器转换为 C 的个人项目。这纯粹是为了学习目的。
我遇到的第一件事是尝试转换以下内容:
if __name__ == "__main__":
if not argv[-1].endswith('.py'):
...
到目前为止,我已经对该endswith
方法进行了以下转换
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool endswith(char* str, char* substr)
{
// case1: one of the strings is empty
if (!str || !substr) return false;
char* start_of_substring = strstr(str, substr);
// case2: not in substring
if (!start_of_substring) return false;
size_t length_of_string = strlen(str);
size_t length_of_substring = strlen(substr);
size_t index_of_match = start_of_substring - str;
// case2: check if at end
return (length_of_string == length_of_substring + index_of_match);
}
int main(int argc, char* argv[])
{
char *last_arg = argv[argc-1];
if (endswith(last_arg, ".py")) {
// ...
}
}
这看起来是否涵盖了 中的所有情况endswith
,还是我错过了一些边缘情况?如果是这样,如何改进?最后,这不是批评,而是编写 C 应用程序的真正问题:编写 C 需要比在 python 中执行相同操作多 5-10 倍的代码是否普遍(或者因为我是初学者所以更多并且不知道如何正确地做事?)