String 关于在OpenCL中使用宏的字符串常量的虚假(?)警告

String 关于在OpenCL中使用宏的字符串常量的虚假(?)警告,string,macros,compilation,opencl,String,Macros,Compilation,Opencl,我在OpenCL内核中使用以下宏: #define ided_printf(_format, ...) printf("(%u,%u,%u) " _format, get_global_id(0), get_group_id(0), get_local_id(0), __VA_ARGS__ ) 而且效果很好。但是,当我编译它时(我在Win7上使用AMD的应用程序OpenCL库),每次使用宏时都会收到以下警告: argument of type "const __constant char *"

我在OpenCL内核中使用以下宏:

#define ided_printf(_format, ...) printf("(%u,%u,%u) " _format, get_global_id(0), get_group_id(0), get_local_id(0), __VA_ARGS__ )
而且效果很好。但是,当我编译它时(我在Win7上使用AMD的应用程序OpenCL库),每次使用宏时都会收到以下警告:

argument of type "const __constant char *" is incompatible with parameter of type "__constant char *"
为什么我会得到这个?毕竟,字符串文字是常量。即使OpenCL编译器没有将它们设置为常量,为什么“(%u,%u,%u)”字符串是常量,而另一个字符串(_格式)不是常量

我假设这是一个编译器错误;如果是的话,我们希望能找到一个解决办法。也许是某种类型的演员阵容?

基于AMD论坛,这是一个bug。是的,演员们会按照同一篇文章中的建议来做:

printf((__constant char *)"%d\n", i);
基于AMD论坛,这是一个bug。是的,演员们会按照同一篇文章中的建议来做:

printf((__constant char *)"%d\n", i);

行得通,谢谢。我先尝试了不同的演员阵容,但对我没有帮助。那很有效,谢谢。我先尝试了不同的演员阵容,但对我没有帮助。