Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C #包含在main()函数中_C_Cell - Fatal编程技术网

C #包含在main()函数中

C #包含在main()函数中,c,cell,C,Cell,我想知道是否有可能在C的main()函数中包含一些内容 例如,在一个Cell程序中,我定义了cache api.h的参数,稍后在main()函数中我要更改这些参数 我知道用#define定义的内容可以在程序中的任何地方用#unde定义,但在重新定义所需参数后,我必须再次包含cache api.h。可能吗 我怎样才能更优雅地解决这个问题?假设我想用cache\u rd(…)从主存储器读取数据,但在执行SPU期间类型会有所不同,我如何在同一个程序中同时使用#define CACHED_TYPE st

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

例如,在一个Cell程序中,我定义了cache api.h的参数,稍后在
main()
函数中我要更改这些参数

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

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

提前感谢您的回答,我希望我的表达清楚。

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

但是,如果使用
#undef
重新定义宏,代码将很难理解,因为同一文本在代码中的不同位置可能有不同的含义

对于自定义类型,尽可能首选
typedef
,因为您仍然可以从编译器的类型检查机制中获益,而且它不太容易出错,因为它比
#define
宏对周围代码产生意外副作用的可能性要小得多。

是的,这很好(可能不是最清晰的设计决策),但“包含”就像是将该文件的副本粘贴到“包含”所在的代码中。

定义
\include
是预处理器宏:

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

为了回答你的问题……不,你真的不想这么做,至少为了下一个不得不尝试解读这一混乱局面的人。

你可以在任何文件中包含任何文件。
。然后它是否有效取决于文件的内容;特别是如果直接输入该内容,该内容是否有效作为文本

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

专门为此目的编写的include文件可以,但不只是任何任意头文件

通用头文件应具有包含保护以防止多次声明,因此,除非取消定义保护宏,否则重新包含头文件在任何情况下都不会产生任何效果


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

如果要优雅地解决此问题,请切换到面向对象的语言d在运行时使用多态性在两者之间进行选择。不幸的是,我不能这样做,我在Cell中,我使用C将您的程序分为不同的文件,并在文件基础上对不同的定义进行本地化。我不知道如何在Cell中使用SPU和PPU…在PPU中,我有一行代码:extern spe_program_handle__SPU;如果我放入spu1,spu2,它知道什么时候发送到spu1,什么时候发送到spu2吗?事实上,这是个好主意……谢谢你,保罗!我认为这是个问题,因为它将错误指向我的#include in the main function,然后是:函数“CACHE\u CACHE\u lock”的存储类无效……(更多函数)…我能从中理解什么?这只回答了第一个问题,第二个问题是如何更优雅地解决它。但当我真的需要时,我能做什么?