1

我正在开发一个实现我制作的算法的加密应用程序。我有大约一年的 C 经验和 6 个月的 C++ 经验,但我有 6 年的 Visual Basic 和 Gambas 经验(我希望我是一个快速学习者)。我想让我的新应用程序尽可能高效;这就是我选择 C ​​而不是 C++ 的原因(我想使用一种低级语言)。

在我的程序中,我使用定义的字符串常量来处理错误消息。我知道预处理器在每次出现时都会用实际字符串替换宏名称。如果我没记错的话,这意味着它预先分配了字符串常量并为每次出现返回不同的指针。我必须释放所有这些字符串指针吗?实际上这似乎有点奇怪......它们的指针是像自动变量(这意味着它们在退出范围时被释放)还是它们永远作为常量保持不变?

我使用了一个名为 messages.h 的专用头文件,其中包含程序可能使用的每个可能的错误消息的定义,这样我就可以更轻松地更改语言等;因此我不能直接将它们写为字符串常量。我想将它们声明为常量变量,但是我要么必须使用具有实际值的 C 文件并将标头版本声明为 extern,要么在包含 messages.h 标头的每个文件中重新声明所有常量(相信我,我有 20 多个包含该项目的文件,大约 50-100 条消息,加上提示消息 - 大约 30 条长消息 - 所以它会消耗大量内存)。

你有什么建议?应该——更重要的是我可以——释放指向常量的指针吗?

4

1 回答 1

1

欢迎使用 C,我希望你永远不要回到 VB ;),... 宏,不,你不必释放那些“字符串”,它不会为每次出现返回不同的指针,看看:

#include <stdio.h>

#define ERROR_MSG "Bla bla bla"

int main(void)
{
    printf("%p\n", (void *)ERROR_MSG);
    printf("%p\n", (void *)ERROR_MSG);
    return 0;
}

输出:

0x40061c
0x40061c

如您所见,打印了相同的地址。

于 2013-05-16T16:22:38.910 回答