#include在main()函数中

我想知道是否有可能在C的main()函数中包含一些东西。

例如,在Cell程序中,我定义了cache-api.h的参数,后者在我想要更改的main()函数中。

我知道用#define定义的内容可以在程序中的任何地方使用#undef来定义,但在重新定义我需要的参数后,我必须再次包含cache-api.h。 那可能吗?

我怎样才能更优雅地解决这个问题? 假设我想使用cache_rd(...)从主存储中读取但是在执行SPU期间类型会有所不同,我如何在同一程序中同时使用#define CACHED_TYPE struct x#define CACHED_TYPE struct y

在此先感谢您的回答,我希望我能表达清楚。

#define#include是预处理器宏: http : //en.wikipedia.org/wiki/C_preprocessor

它们在编译之前被转换/内联。

要回答你的问题……不,你真的不想这样做,至少为了下一个必须尝试和解读那个烂摊子的人。

#define#include只是在编译的“预处理”阶段发生的文本操作,从技术上讲,这是一个可选阶段。 因此,您可以通过各种方式混合和匹配它们,只要您的预处理器语法正确,它就可以工作。

但是,如果您使用#undef重新定义宏,则您的代码将难以遵循,因为相同的文本在代码中的不同位置可能具有不同的含义。

对于自定义类型, typedef在可能的情况下是首选,因为您仍然可以从编译器的类型检查机制中受益,并且它不易出错,因为它比#define宏更不可能对周围的代码产生意外的副作用。

是的,这很好(可能不是最清晰的设计决定),但#include就像将文件复制并粘贴到#include所在的代码中一样。

您可以#include 任何文件中的任何文件。 它是否有效取决于文件的内容; 具体而言,如果内容直接作为文本输入,该内容是否有效。

头文件通常包含通常仅在函数定义之外(或在任何类型的编码构造之外)有效的声明和构造 – 线索在名称文件中。 否则,您可能会更改声明的范围,或者更多地使得编译单元在语法上无效。

专门为此目的编写的包含文件可能没问题,但不仅仅是任意头文件。

通用头文件应该包含防止多重声明的防护,因此除非您取消定义防护宏,否则重新包含头文件在任何情况下都不起作用。

您的问题的一个可能的解决方案是创建单独编译的模块(编译单元),其中包含您需要调用的API的包装函数。 然后,每个编译单元在定义适当的配置宏之后可以包括API头文件。 然后,您将拥有这些包装函数提供的两个独立且独立的接口。