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