The preprocessing directives defined by the C99 specification are supported.
The #pragma directive is described as:
#pragma pp-tokensopt new-line
A #pragma directive where the preprocessing token
OPENCL (used instead
STDC) does not immediately follow pragma in the directive (prior to
any macro replacement) causes the implementation to behave in an
The behavior might cause translation to fail or cause the translator or the
resulting program to behave in a non-conforming manner.
Any such pragma that is not recognized by the implementation is ignored.
If the preprocessing token
OPENCL does immediately follow #pragma in the
directive (prior to any macro replacement), then no macro replacement is
performed on the directive, and the directive shall have one of the
following forms whose meanings are described elsewhere:
// on-off-switch is one of ON, OFF, or DEFAULT #pragma OPENCL FP_CONTRACT on-off-switch #pragma OPENCL EXTENSION extensionname : behavior #pragma OPENCL EXTENSION all : behavior
The following predefined macro names are available.
The presumed name of the current source file (a character string literal).
The presumed line number (within the current source file) of the current source line (an integer constant).
Substitutes an integer reflecting the version number of the OpenCL supported by the OpenCL device. The version of OpenCL described in this document will have
__OPENCL_VERSION__substitute the integer 200.
Substitutes the integer 100 reflecting the OpenCL 1.0 version.
Substitutes the integer 110 reflecting the OpenCL 1.1 version.
Substitutes the integer 120 reflecting the OpenCL 1.2 version.
Substitutes the integer 200 reflecting the OpenCL 2.0 version.
Substitutes an integer reflecting the OpenCL C version specified by the
-cl-stdbuild option (see section 22.214.171.124 of the OpenCL Specification) to clBuildProgram or clCompileProgram. If the
-cl-stdbuild option is not specified, the highest OpenCL C 1.x language version supported by each device is used as the version of OpenCL C when compiling the program for each device. The version of OpenCL C described in this document will have
__OPENCL_C_VERSION__substitute the integer 200 if
Used to determine if the OpenCL device is a little endian architecture or a big endian architecture (an integer constant of 1 if device is little endian and is undefined otherwise). Also refer to the value of the
__kernel_exec(X, type__n__) (and
is defined as
__kernel __attribute__((work_group_size_hint(X, 1, 1))) \ __attribute__((vec_type_hint(type__n__)))
Used to determine if the OpenCL device supports images. This is an integer constant of 1 if images are supported and is undefined otherwise. Also refer to the value of the
Used to determine if the
-cl-fast-relaxed-mathoptimization option is specified in build options given to clBuildProgram or clCompileProgram. This is an integer constant of 1 if the
-cl-fast-relaxed-mathbuild option is specified and is undefined otherwise.
NULL macro expands to a null pointer constant.
An integer constant expression with the value 0, or such an expression cast
void * is called a null pointer constant.
The macro names defined by the C99 specification but not currently supported by OpenCL are reserved for future use.
The predefined identifier
__func__ is available.
For more information, see the OpenCL C Specification
This page is extracted from the OpenCL C Specification. Fixes and changes should be made to the Specification, not directly.
Copyright (c) 2014-2020 Khronos Group. This work is licensed under a Creative Commons Attribution 4.0 International License.