OpenGL ES着色器代码被定义为C字符串。为了更直观地编写着色器代码,我定义了一个名为SHADER_STRING(code)
的宏,如下所示。但我遇到GCC警告unknown escape sequence: '\#'
,不知道如何抑制或修复它。GCC:如何解决或抑制警告:未知的转义序列:'#'
甲示例代码如下
#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
一无所知。
简单地说'#version ...'呢? – xanoetux
你的[mcve]不能编译,你的问题不清楚。 – Stargateur
什么是'TS_SHADER_STRING'?代码片段中只定义了'SHADER_STRING'。 '\#'简单地变成'#'与提到的警告。为什么逃跑呢?我有一种预感,即你从别的地方复制粘贴了这段代码,并在解析上下文的时候将它取出。 – dhke