AlekseyPython
Но в этом случае имена функций также будут пересекаться и “перебивать” друг друга.
У меня на C программы есть. Вот как ты думаешь, как я их делаю? При этом там нет классов и пространств имён нет.
А вот как
patcher.h
#ifndef PATCHER_H
#define PATCHER_H
#include <stdio.h>
int patcher_start(FILE *fp);
int patcher_patch(size_t offset, const char *bytes, size_t length);
int patcher_can_patch(long offset, long length);
int patcher_end();
#endif
patcher.c
#include "patcher.h"
static FILE *_fp;
int patcher_start(FILE *fp)
{
_fp = fp;
return 1;
}
int patcher_end(void)
{
_fp = NULL;
return 1;
}
int patcher_patch(size_t offset, const char *bytes, size_t length)
{
if (fseek(_fp, offset, SEEK_SET))
return 0;
if (fwrite(bytes, length, 1, _fp) != 1)
return 0;
return 1;
}
int patcher_can_patch(long offset, long length)
{
long old_offset, end_offset;
old_offset = ftell(_fp);
if (old_offset < 0)
return 0;
if (fseek(_fp, 0, SEEK_END))
return 0;
end_offset = ftell(_fp);
if (end_offset < 0)
return 0;
if (fseek(_fp, old_offset, SEEK_SET))
return 0;
return offset + length <= end_offset;
}
Мы просто в тексте вводим пространство имён, в данном случае patcher, и оно у нас стоит во всех методах исполнителя, символизируя о том, что метод относится к нему. Тот же принцип применён в GTK (он на C сделан).
Так что для меня функции в одном модуле не страшны, так как у меня сишник - первый язык.