Storage-class Qualifiers

The typedef, extern and static storage-class specifiers.

typedef extern static


The typedef, extern, and static storage-class specifiers are supported. The auto and register storage-class specifiers are not supported.

The extern storage-class specifier can only be used for functions (kernel and non-kernel functions) and global variables declared in program scope or variables declared inside a function (kernel and non-kernel functions) The static storage-class specifier can only be used for non-kernel functions and global variables declared in program scope and variables inside a function declared in the global or constant address space.


extern constant float4 noise_table[256]; static constant float4 color_table[256]; extern kernel void my_foo(image2d_t img); extern void my_bar(global float *a); kernel void my_func(image2d_t img, global float *a) { extern constant float4 a; static constant float4 b = (float4)(1.0f); // OK. static float c; // Error: No implicit address space global int hurl; // Error: Must be static ... my_foo(img); ... my_bar(a); ... while (1) { static global int inside; // OK. ... } ... }


OpenCL Specification

Also see


Copyright © 2007-2013 The Khronos Group Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the condition that this copyright notice and permission notice shall be included in all copies or substantial portions of the Materials.