OpenGL ES 着色器代码定义为 C 字符串。为了让编写着色器代码更加直观,我定义了一个名为 SHADER_STRING(code)
的宏。像下面这样。但我遇到了 GCC 警告 unknown escape sequence: '\#'
并且不知道如何抑制它或修复它。
示例代码如下
#include <stdio.h>
int main(void)
{
#define _SHADER_STRING(code) #code
#define SHADER_STRING(code) _SHADER_STRING(code)
// OpenGL ES Shader codes
char vShaderStr[] = SHADER_STRING(
\#version 300 es \n
void main()
{
// ... some OpenGL ES codes.
});
printf("%s\n", vShaderStr);
return 0;
}
因为 #version
是OpenGL ES 3.0支持的预处理器,那么替换\#
无效与 \\#
,否则代码将变成
\#version 300 es
void main() { }
OpenGL 着色器编译器会提示对\#version
一无所知。 .
最佳答案
根据this answer ,以下代码应该可以工作:
#define GLSL(version, shader) "#version " #version "\n" #shader
const GLchar* vShaderStr_30 = GLSL(300,
void main() {
…
}
);
关于c - GCC:如何修复或抑制警告:未知转义序列: '\#',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44382219/