c - GCC:如何修复或抑制警告:未知转义序列: '\#'

标签 c gcc opengl-es

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/

相关文章:

c - 二维数组中穿过障碍物(地雷)的最短路径(C 编程)

c++ - 为什么 gcc 编译器标志未知?

math - 在 GL ES 中将片段着色器渐变结果从黑色转换为透明

ios - 为什么 GLKView 没有上下文?

android - 打开 GLES 或 Canvas ? (安卓)

c++ - 如何将数组从c++传递到python函数并将python返回的数组检索到c++

c - 父进程跟踪子进程的终止状态

gcc - 在Fedora上使用Gold代替ld作为系统链接器

c++ - 当 typedef 名称与可变参数模板参数名称一致时出现 GCC 错误

c - Gettext 克隆或替代许可(非 copyleft)?