Professional Documents
Culture Documents
Migrate
Migrate
Guía de migración
IBM
GC28-3309-01
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información incluida en el
apartado “Avisos” en la página 67.
Edición de Primero
Esta edición se aplica a IBM® Open XL C/C++ for AIX 17.1.1 (Programa 5765-J18; 5725-C72) y a todos los releases y
modificaciones posteriores hasta que se indique lo contrario en nuevas ediciones. Asegúrese de que está utilizando la
edición correcta para el nivel del producto.
© Copyright International Business Machines Corporation 2022.
Contenido
iii
Optimización guiada por perfil (PGO).................................................................................................. 59
Variables no inicializadas..................................................................................................................... 60
Avisos................................................................................................................. 67
Marcas comerciales................................................................................................................................... 69
Índice................................................................................................................. 71
iv
Acerca de este documento
Este documento contiene consideraciones sobre la migración aplicables a IBM Open XL C/C++ for AIX
17.1.1.
convenios
Convenios tipográficos
La tabla siguiente muestra los convenios tipográficos utilizados en la documentación de IBM Open XL
C/C++ for AIX 17.1.1 .
Diagramas de sintaxis
A lo largo de esta información, los diagramas ilustran la sintaxis de IBM Open XL C/C++ . Esta sección le
ayuda a interpretar y utilizar estos diagramas.
• Lea los diagramas de sintaxis de izquierda a derecha, de arriba a abajo, siguiendo la vía de acceso de la
línea.
El símbolo ▶▶─ ─ ─ indica el principio de un mandato, directiva o sentencia.
El símbolo ─ ─ ─▶ indica que la sintaxis del mandato, directiva o sentencia continúa en
la línea siguiente.
El símbolo ▶─ ─ ─ indica que un mandato, directiva o sentencia continúa desde la línea
anterior.
El símbolo ─ ─ ─▶◀ indica el final de un mandato, directiva o sentencia.
Los fragmentos, que son diagramas de unidades sintácticas que no son mandatos, directivas o
sentencias completas, empiezan por el símbolo │ ─ ─ ─ ─ y terminan con el
símbolo ─ ─ ─ ─ │ .
• Los elementos necesarios se muestran en la línea horizontal (la ruta principal):
keyword argumento_necesario
• Si puede elegir entre dos o más elementos, se muestran verticalmente, en una pila.
Si debe elegir uno de los elementos, se muestra un elemento de la pila en la vía de acceso principal.
keyword required_argument1
required_argument2
Si la elección de uno de los elementos es opcional, toda la pila se muestra debajo de la ruta principal.
keyword
optional_argument1
optional_argument2
• Una flecha que vuelve a la izquierda sobre la línea principal (una flecha de repetición) indica que puede
elegir más de una opción entre los elementos apilados o repetir un elemento. El carácter separador, si
es distinto de un espacio en blanco, también se indica:
,
keyword argumento_repetible
keyword argumento_alternativo
• Las palabras clave se muestran en letras no cursivas y deben introducirse exactamente como se
muestra.
• Las variables se muestran en minúsculas en cursiva. Representan nombres o valores proporcionados
por el usuario.
• Si se muestran signos de puntuación, paréntesis, operadores aritméticos u otros símbolos, debe
especificarlos como parte de la sintaxis.
A continuación se muestra un ejemplo de un diagrama de sintaxis con una interpretación:
1
EXAMPLE constante_carácter a e lista_nombres
b c
Notas:
1 Extensión de IBM
Interprete el diagrama como se indica a continuación:
• Especifique la palabra clave EXAMPLE.
• EJEMPLO es una extensión IBM .
• Especifique un valor para char_constant.
• Especifique un valor para a o b, pero no para ambos.
• Opcionalmente, especifique un valor para c o d.
• Especifique al menos un valor para e. Si especifica más de un valor, debe colocar una coma entre
cada uno.
• Especifique el valor de al menos un nombre para lista_nombres. Si especifica más de un valor, debe
colocar una coma entre cada uno. (La sintaxis _list es equivalente a la sintaxis anterior para e.)
Información relacionada
Las secciones siguientes proporcionan información relacionada para IBM Open XL C/C++:
Para leer un archivo PDF, utilice Adobe Reader. Si no tiene Adobe Reader, puede descargarlo (sujeto a
los términos de la licencia) desde el sitio web de Adobe en http://www.adobe.com.
Para obtener más información sobre el compilador, consulte los compiladores C/C++ y Fortran en la
comunidad IBM Power en http://ibm.biz/openxl-power-compilers.
Más información
• Utilización de GNU Compiler Collection disponible en http://gcc.gnu.org/onlinedocs.
Soporte técnico
El soporte técnico adicional está disponible en la página de soporte de IBM Open XL C/C++ en https://
www.ibm.com/mysupport/s/topic/0TO0z0000006v6TGAQ/xl-cc?productId=01t0z000007g72LAAQ. Esta
página proporciona un portal con funciones de búsqueda para una gran selección de notas técnicas y otra
información de soporte.
Si tiene alguna pregunta sobre el producto, acéchelo en los compiladores IBM C/C++ y Fortran en la
comunidad Power o abra un caso en https://www.ibm.com/mysupport/s/topic/0TO0z0000006v6TGAQ/
xl-cc?productId=01t0z000007g72LAAQ.
Para obtener la información más reciente sobre IBM Open XL C/C++ y IBM XL C/C++, visite el sitio de
información del producto en https://www.ibm.com/products/open-xl-cpp-aix-compiler-power.
Soporte de idioma
En este tema se describe el soporte para las características estándar de idioma y las características de
extensión de IBM en IBM Open XL C/C++ for AIX 17.1.1.
IBM
IBM Open XL C/C++ for AIX 17.1.1 ya no ignora los atributos de visibilidad como en IBM Open XL C/C++
for AIX 17.1.0 y se proporcionan las opciones -fvisibility y -fvisibility-inlines-hidden para
modificar la visibilidad a nivel de unidad de conversión. Para obtener más detalles, consulte Enlace de
bibliotecas compartidas y control de visibilidad de símbolos en la Guía del usuario.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a todas las características de extensión de IBM
soportadas por IBM XL C/C++ for AIX 16.1.0 o releases anteriores. Para obtener detalles de las
características de extensión de IBM , consulte la publicación Consulta de lenguaje de IBM XL C/C++
for AIX 16.1.0 o releases anteriores.
Compatibilidad binaria
En general, los objetos C++ creados con IBM Open XL C/C++ for AIX 17.1.1 son compatibles en binario
con los objetos C++ creados con el componente frontal basado en Clang de IBM XL C/C++ for AIX 16.1.0
que invoca xlclang++.
Los casos siguientes son excepciones:
• Programas que se van a compilar con la opción -qpdf1 . La razón es que IBM Open XL C/C++ for
AIX 17.1.1 y el frontal basado en Clang de IBM XL C/C++ for AIX 16.1.0 realizan llamadas a distintas
bibliotecas de PDF. Consulte el tema Optimización guiada de perfil (PGO) para obtener más información.
• Programas que contienen campos de bits.
La implementación del estándar de lenguaje C++11 requiere una actualización de la biblioteca std
libc++y provoca una interrupción en la compatibilidad binaria C++. Por lo tanto, los archivos de objeto
C++ compilados con IBM Open XL C/C++ for AIX 17.1.1 no son directamente interoperables con los
archivos de objeto C++ generados por el frontal basado en XL de IBM XL C/C++ for AIX 16.1.0 o releases
anteriores, que invoca xlC. Debe volver a compilar los programas clásicos con IBM Open XL C/C++ for
AIX 17.1.1 para resolver correctamente la incompatibilidad binaria y los archivos de objeto de enlace.
Nota: Sin embargo, la incompatibilidad no prohíbe la coexistencia de archivos de objeto C++ que no
pasan objetos o excepciones.
Mandatos de invocación
Los mandatos de invocación clásicos soportados por IBM XL C/C++ for AIX 16.1.0 o releases anteriores,
incluidos xlc y xlC , no están soportados en IBM Open XL C/C++ for AIX 17.1.1. Los mandatos de
invocación xlclang y xlclang++ tampoco están soportados.
En IBM Open XL C/C++ for AIX 17.1.1, utilice los mandatos de invocación ibm-clang, ibm-clang_ry
ibm-clang++_r en su lugar.
Nota:
• -pthread no está implícito cuando el compilador se invoca mediante ibm-clang.
• ibm-clang_r sustituye a xlc , que es un mandato de invocación en IBM XL C/C++ for AIX 16.1.0 o
releases anteriores. De forma similar, ibm-clang++_r sustituye a xlC.
Para obtener más información sobre los mandatos de invocación clásicos, consulte mandatos de
invocación clásicos.
linkxlC
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, el programa de utilidad linkxlC enlaza archivos
C++ .o y .a . Se puede utilizar en sistemas en los que el compilador no está instalado.
En IBM Open XL C/C++ for AIX 17.1.1, linkxlC no está soportado. En su lugar, utilice ibm-clang++_r
para enlazar binarios Open XL C/C++ . Póngase en contacto con el servicio al cliente si necesita enlazar
binarios Open XL C++ donde el programa de utilidad ibm-clang++_r no está disponible.
Para enlazar binarios compilados con IBM XL C/C++ for AIX 16.1.0 utilizando xlC y binarios compilados
con IBM Open XL C/C++ for AIX 17.1.1 utilizando ibm-clang++_r, puede realizar una de las tareas
siguientes:
• Enlace binarios mixtos con el mandato xlC o V16 linkxlC y añada las opciones de enlazador V17
necesarias. Ejecute el mandato ibm-clang++_r -v para obtener las opciones de enlazador que
proporciona IBM Open XL C/C++ for AIX 17.1.1 .
• Enlace binarios mixtos con el mandato ibm-clang++_r y añada las opciones de enlazador V16
necesarias. Ejecute el mandato xlC -v para obtener las opciones de enlazador que proporciona IBM
XL C/C++ for AIX 16.1.0 .
makeC++SharedLib
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, el programa de utilidad makeC++SharedLib
permite la creación de bibliotecas compartidas C++ en sistemas en los que el compilador no está
instalado.
En IBM Open XL C/C++ for AIX 17.1.1, makeC++SharedLib no está soportado. En su lugar, utilice
ibm-clang++_r -shared para crear bibliotecas compartidas Open XL C++. Póngase en contacto con el
servicio al cliente si necesita crear bibliotecas compartidas Open XL C++ donde el programa de utilidad
ibm-clang++_r no está disponible.
Para crear binarios compartidos a partir de archivos de objeto compilados con IBM XL C/C++ for AIX
16.1.0 utilizando xlC y archivos de objeto compilados con IBM Open XL C/C++ for AIX 17.1.1 utilizando
ibm-clang++_r, puede realizar una de las tareas siguientes:
• Enlace binarios mixtos con el mandato xlC o V16 makeC++SharedLib y añada las opciones de
enlazador V17 necesarias. Ejecute el mandato ibm-clang++_r -v para obtener las opciones de
enlazador que proporciona IBM Open XL C/C++ for AIX 17.1.1 .
• Enlace binarios mixtos con el mandato ibm-clang++_r y añada las opciones de enlazador V16
necesarias. Ejecute el mandato xlC -v para obtener las opciones de enlazador que proporciona IBM
XL C/C++ for AIX 16.1.0 .
Una opción que debe pasarse al mandato ld mediante ibm-clang++_r puede requerir que se
especifique -Wl, delante de la opción.
Para aprender a enlazar bibliotecas compartidas, consulte Enlace de bibliotecas compartidas.
Información relacionada
• Mandato ld
Opciones de compilador
Tenga en cuenta una serie de cambios en las opciones de compilador cuando migre el programa desde
IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++ for AIX 17.1.1.
Tabla 4. Valores predeterminados de opción en IBM Open XL C/C++ for AIX 17.1.1 y IBM XL C/C++ for AIX
16.1.0
Valor predeterminado en el frontal basado en Valor predeterminado en IBM Open XL C/C++ for
Clang de IBM XL C/C++ for AIX 16.1.0 AIX 17.1.1
-std=gnu99 -std=gnu17
-std=c + + 11 -std=gnu++14
-mcpu=power4 -mcpu=power7
-qnolibansi -fbuiltin, que es una opción equivalente a -qlibansi
-qnostrict está implícito cuando -O3 está en vigor -ffast-matemáticas no está implícito cuando -O3
está en vigor
Nota: El frontal basado en Clang de IBM XL C/C++ for AIX 16.1.0 es invocado por xlclang o xlclang++.
Tabla 5. Valores predeterminados de opción en IBM Open XL C/C++ for AIX 17.1.1 y IBM Open XL C/C++
for AIX 17.1.0
Valor predeterminado en IBM Open XL C/C++ for Valor predeterminado en IBM Open XL C/C++ for
AIX 17.1.0 AIX 17.1.1
-mllvm--enable-ppc-gen-scalar-mass=false -mllvm--enable-ppc-gen-scalar-mass=true cuando
cuando no se especifica -mllvm no se especifica -mllvm
Correlación de opciones
El tema proporciona una correlación de las opciones clásicas del compilador IBM XL C/C++ y las opciones
de Clang que tienen las mismas funciones o funciones similares.
Nota: Las subopciones de estas opciones no tienen necesariamente una correlación de uno a uno.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Información relacionada
• “Correlación de opciones” en la página 5
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-b
En IBM Open XL C/C++ for AIX 17.1.1, las opciones que empiezan por -b que el compilador no reconoce
de otro modo se reenvían implícitamente al enlazador. Las opciones de enlazador con el prefijo -Wl se
pueden reenviar explícitamente al enlazador.
-E
A diferencia de IBM XL C/C++ for AIX 16.1.0 y releases anteriores, IBM Open XL C/C++ for AIX 17.1.1
ignora la opción -E para los archivos de entrada con sufijos de nombre de archivo no reconocidos. Puede
simular el comportamiento de los releases XL clásicos especificando el tipo de lenguaje C a través de la
opción -x c cuando tenga archivos de entrada con sufijos de nombre de archivo no reconocidos.
En el ejemplo siguiente, el compilador XL clásico preprocesa file.sqc utilizando el tipo de lenguaje C y
emite la salida preprocesada a stdout:
xlc -E file.sqc
En IBM Open XL C/C++ for AIX 17.1.1, para obtener un comportamiento similar, especifique el tipo de
lenguaje C antes de los archivos de entrada que tienen sufijos de nombre de archivo no reconocidos.
Consulte el ejemplo siguiente:
-f
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -f nombra un archivo que almacena una
lista de archivos de objeto para que el compilador los pase al enlazador.
En IBM Open XL C/C++ for AIX 17.1.1, utilice la opción -Wl,-f en su lugar. Sin embargo, si se invoca
el enlazador para producir un objeto compartido pero no se proporciona un archivo de exportación,
es posible que el objeto compartido resultante no exporte los símbolos correctos. Además, la opción
-Wl,-f no funciona si no se proporcionan objetos o archivos de origen en la línea de mandatos.
-O
IBM Open XL C/C++ for AIX 17.1.1 da soporte a los niveles de optimización -O0, -O1, -O2, -O3y -Ofast .
Información relacionada
• -mcpu
La optimización guiada por perfil (PGO) es una alternativa para la opción -pg . El programa de utilidad
ibm-llvm-profdata show se puede utilizar para visualizar información del archivo de perfil PGO.
Información relacionada
• “Optimización guiada por perfil (PGO)” en la página 59
• Programas de utilidad y mandatos
-P
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -P preprocesa los archivos de origen
especificados en la invocación del compilador, sin compilar, y crea un archivo preprocesado de salida para
cada archivo de entrada. El preprocesador no genera marcadores de línea.
IBM Open XL C/C++ for AIX 17.1.1 sigue dando soporte a la opción -P , pero su comportamiento
se ha modificado para que sea coherente con el de -P en GCC. Específicamente, -P ya no genera
archivos de salida preprocesados. En su lugar, inhabilita la generación de marcadores de línea en la salida
preprocesada generada por otras opciones como, por ejemplo, -E.
Para obtener un comportamiento similar de -P en IBM XL C/C++ for AIX 16.1.0 o releases anteriores,
utilice las opciones -E -P y -o en IBM Open XL C/C++ for AIX 17.1.1.
Ejemplo
Este es un mandato XL clásico. Después de ejecutar el mandato, file.c se preprocesa sin marcadores
de línea generados en la salida preprocesada.
Este mandato XL clásico se puede sustituir por el mandato siguiente en IBM Open XL C/C++:
donde,
• La opción -E indica al compilador que preprocese file.c sin compilar.
• La opción -P indica al compilador que no inserte marcadores de línea en la salida preprocesada.
• La opción -o file.i indica al compilador que almacene la salida preprocesada en file.i.
Información relacionada
• Documentación en línea de GCC
-qaggrcopy
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qaggrcopy habilita las operaciones de
copia destructivas para estructuras y uniones.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente a
-qaggrcopy. De forma predeterminada, el compilador utiliza una copia destructiva para las asignaciones
de estructura o unión. Si se desea una copia no destructiva para asignaciones de estructura o unión, se
recomienda utilizar la función de biblioteca memmove .
Información relacionada
• subrutina de movimiento
-qalias
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qalias indica si un programa contiene
determinadas categorías de alias o no se ajusta a las reglas de alias estándar C/C++.
En IBM Open XL C/C++ for AIX 17.1.1, la opción de compilador clásico -qalias=ansi se correlaciona
con -fstrict-aliasing y -qalias=noansi se correlaciona con -fno-strict-aliasing. Puede
utilizar -fno-strict-aliasing para compilar código que no se ajusta a las reglas de alias estándar
ANSI C/C++. Sin embargo, se recomienda compilar todos los archivos con -fstrict-aliasing durante
una compilación LTO para obtener el mejor rendimiento.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente a
-qalias=restrict. Las optimizaciones para punteros calificados con la palabra clave C99 restrict o
la palabra clave C++ __restrict siempre están habilitadas en IBM Open XL C/C++ for AIX 17.1.1 y no
se pueden inhabilitar.
Información relacionada
• Optimización de tiempo de enlace (LTO)
• Documentación en línea de GCC
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qalign
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qalign especifica la alineación de los
objetos de datos en el almacenamiento, lo que evita problemas de rendimiento con datos mal alineados.
Si ha utilizado la opción -qalign para compilar el programa, elimine esta opción y añada las directivas
#pragma align y #pragma align(reset) correspondientes en el programa cuando migre el
programa a IBM Open XL C/C++ for AIX 17.1.1.
Información relacionada
• “#pragma alloca (solo C)” en la página 32
• __builtin_alloca
-qassert
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qassert proporciona información
sobre las características de los programas que pueden ayudar a ajustar las optimizaciones.
En IBM Open XL C/C++ for AIX 17.1.1, no hay ninguna opción que sea funcionalmente equivalente a
-qassert. Sin embargo, puede obtener sugerencias de optimización similares a través de la función
__builtin_assume() o __builtin_assume_aligned() .
-qcompacto
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qcompact evita optimizaciones que
aumentan el tamaño del código.
En IBM Open XL C/C++ for AIX 17.1.1, la opción -Oz o -Os proporciona una función similar para controlar
el tamaño del código de salida, pero -Oz y -Os sólo funcionan en el nivel de optimización de -O2 . Por
ejemplo, si especifica -O3 -Os, -O3 se altera temporalmente.
Al portar el programa desde IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++ for
AIX 17.1.1, vuelva a evaluar el tamaño de la salida generada por IBM Open XL C/C++ for AIX 17.1.1. Si
es necesario reducir el tamaño del código, intente utilizar la opción -Os y anote las compensaciones de
rendimiento. Si es necesario reducir más el tamaño del código, intente utilizar la opción -Oz .
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qcpluscmt (solo C)
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qcpluscmt habilita el reconocimiento
de comentarios de estilo C++ en archivos de origen C.
En IBM Open XL C/C++ for AIX 17.1.1, los comentarios C++ se aceptan en archivos de origen C. No hay
forma de inhabilitar el reconocimiento de comentarios de estilo C++ en archivos de origen C.
-qdump_class_hierarchy
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción que sea funcionalmente equivalente
a -qdump_class_hierarchy. En IBM Open XL C/C++ for AIX 17.1.1, -Xclang -fdump-record-
layouts se puede utilizar para generar un informe similar de diseños de estructura; sin embargo, el
formato del informe es diferente del informe generado por -qdump_class_hierarchy en IBM XL C/C++
for AIX 16.1.0 o releases anteriores.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qenum
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qenum especifica la cantidad de
almacenamiento ocupado por enumeraciones.
En IBM Open XL C/C++ for AIX 17.1.1, utilice -fshort-enums como una opción funcionalmente
equivalente a -qenum=small. No se da soporte a otras subopciones de -qenum . Para programas C+
+, también puede utilizar la característica de enumeración con ámbito C++11 para especificar el tipo
subyacente de enumeraciones.
Información relacionada
• “Enumeración #pragma” en la página 33
• Documentación en línea de GCC
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qexpfile
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qexpfile guarda todos los símbolos
exportados en un archivo designado cuando se utiliza junto con la opción -qmkshrobj o -G .
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente a -qexpfile.
El programa de utilidad CreateExportList que tiene una función similar a -qexpfile está disponible en
IBM Open XL C/C++ for AIX 17.1.1. Este programa de utilidad crea un archivo que contiene una lista de
todos los símbolos exportables encontrados en un conjunto determinado de archivos de objeto.
-qfloat
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qfloat selecciona distintas estrategias
para acelerar o mejorar la precisión de los cálculos de coma flotante. La mayoría de las subopciones
-qfloat no tienen opciones funcionalmente equivalentes en IBM Open XL C/C++ for AIX 17.1.1.
Si ha especificado -qfloat al compilar el programa con IBM XL C/C++ for AIX 16.1.0 o releases
anteriores, tenga en cuenta las directrices siguientes al migrar el programa a IBM Open XL C/C++ for
AIX 17.1.1:
• La opción -ffp-model=strict garantiza un comportamiento correcto del compilador, pero inhabilita
casi todas las optimizaciones de coma flotante. Utilice esta opción con discreción.
• Los aspectos de -qfloat=[no]fenv que pertenecen a la modalidad de redondeo se pueden controlar
a través de -f[no-]rounding-math. De forma similar, los aspectos de -qfloat=[no]fenv que
pertenecen a comportamientos de excepción se pueden controlar a través de -ffp-exception-
behavior.
• En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qfloat=[no]fold podía evaluar
expresiones de coma flotante constante en tiempo de compilación. En IBM Open XL C/C++ for
AIX 17.1.1, puede utilizar la opción -f[no-]rounding-math para controlar el plegado constante
en algunos casos, pero esta opción afecta a algo más que al plegado constante y puede tener
implicaciones de rendimiento y precisión que van más allá de lo que -qfloat=[no]fold controlaba.
• En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qfloat=[no]hscmplx podría
acelerar las operaciones que implican división compleja y valor absoluto complejo, y la opción
-qfloat=[no]hsflt podría acelerar los cálculos impidiendo el redondeo para expresiones de
precisión simple y sustituyendo la división de coma flotante por la multiplicación por el recíproco
del divisor. En IBM Open XL C/C++ for AIX 17.1.1, utilice la opción -f[no-]rounding-math para
controlar las optimizaciones que pueden dar lugar a diferentes comportamientos de redondeo y utilice
la opción -f[no-]reciprocal-math para controlar la sustitución de las operaciones de división por
una multiplicación del numerador por el recíproco del denominador.
• En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, el -qfloat=[no]nans le permitía utilizar
la opción -qflttrap=invalid:enable para detectar y tratar con condiciones de excepción que
implican la señalización de valores NaN (no un número). En IBM Open XL C/C++ for AIX 17.1.1, utilice la
opción -ffp-exception-behavior para controlar algunos aspectos de la semántica controlada por
-qfloat=[no]nans, pero el impacto va más allá de señalar NaNs. Además, a diferencia de IBM XL
C/C++ for AIX 16.1.0 o releases anteriores, no hay forma de controlar excepciones al convertir un SNaN
de precisión simple a doble en IBM Open XL C/C++ for AIX 17.1.1.
• En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, el -qfloat=[no]rsqrt aceleraba algunos
cálculos sustituyendo la división por el resultado de una raíz cuadrada con la multiplicación
por el recíproco de la raíz cuadrada. En IBM Open XL C/C++ for AIX 17.1.1, utilice la opción
-f[no-]reciprocal-math para conseguir un efecto similar, pero el impacto va más allá de la mera
división por la raíz cuadrada.
• La opción -qfloat=[no]spnans ha quedado en desuso y se ha sustituido por -qfloat=nans. Tenga
en cuenta las directrices de migración de -qfloat=[no]nans si ha utilizado -qfloat=[no]spnans
para compilar el programa.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qfullpath
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -q[no]fullpath registra los nombres
de vía de acceso absolutos o relativos de los archivos de origen y cabecera en los archivos de objeto
compilados con información de depuración para que las herramientas de depuración puedan localizar
correctamente los archivos de origen. Cuando -qfullpath está en vigor, se conservan los nombres de
vía de acceso absolutos de los archivos de origen. Cuando -qnofullpath está en vigor, se conservan los
nombres de vía de acceso relativa de los archivos de origen.
En IBM Open XL C/C++ for AIX 17.1.1, sólo se da soporte a la información de depuración DWARF.
El comportamiento predeterminado del compilador es como si -qfullpath estuviera en vigor, lo que
significa que el compilador incluye las vías de acceso absolutas para los archivos de origen en la
información de depuración. Sin embargo, si los archivos fuente no se encuentran en la ubicación de
vía de acceso absoluta, el depurador podría recurrir a la ubicación de vía de acceso relativa.
Además, la opción -fdebug-prefix-map es una opción relacionada con -qfullpath, que vuelve a
correlacionar las vías de acceso de origen de archivo en la información de depuración.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qfunctrace
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qfunctrace llama a las rutinas de
rastreo para rastrear los puntos de entrada y salida de las funciones especificadas en una unidad de
compilación.
En IBM Open XL C/C++ for AIX 17.1.1, la opción -finstrument-functions tiene una función similar,
que genera llamadas para instrumentar puntos de entrada y salida de funciones.
Información relacionada
• “#pragma rastreo no funcional” en la página 37
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Información relacionada
• -mllvm
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qignerrno
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qignerrno permite al
compilador realizar optimizaciones como si las llamadas del sistema no modificaran errno. La macro
__IGNERRNO__ se define en 1 cuando la opción -qignerrno está en vigor.
En IBM Open XL C/C++ for AIX 17.1.1, la opción -fno-math-errno proporciona la misma función que
-qignerrno. Sin embargo, la macro __IGNERRNO__ no está soportada en IBM Open XL C/C++ for AIX
17.1.1, por lo que -fno-math-errno no predefine __IGNERRNO__.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qinitauto
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qinitauto inicializa variables
automáticas no inicializadas en un valor específico para fines de depuración.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qinline
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, cuando especificaba la opción
-qinline=noauto , sólo se tenían en cuenta los siguientes tipos de funciones para la incorporación:
• Funciones definidas con el especificador en línea
• Funciones pequeñas identificadas por el compilador
Para lograr el mismo efecto para incorporar funciones explícita o implícitamente insinuadas, especifique
-fno-inline-functions y -finline-hint-functions en IBM Open XL C/C++ for AIX 17.1.1.
En IBM XL C/C++ for AIX 16.1.0 y releases anteriores, -qinline+<nombre_función> y -qinline-
<nombre_función> controlaban la incorporación automática para funciones individuales. En IBM Open XL
C/C++ for AIX 17.1.1, no hay una opción funcionalmente equivalente. Para conseguir el mismo efecto,
marque las funciones con el atributo always_inline o noinline .
Notas:
• -finline-functions y -finline-hint-functions sólo entran en vigor en -O1 o superior.
• El efecto de -finline-hint-functions no es acumulativo. Por ejemplo, si la opción viene después
de -finline-functions, -finline-functions se altera temporalmente y sólo se incorporan
funciones explícita o implícitamente insinuadas.
• La opción -fno-inline se altera temporalmente si se especifica junto con -finline-functions o
-finline-hint-function.
• La opción -fno-inline-hint-functions no está soportada por IBM Open XL C/C++ for AIX 17.1.1.
Información relacionada
• Documentación en línea de GCC
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qisolated_call
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qisolated_call especifica funciones
en el archivo de origen que no tienen efectos secundarios distintos de los implícitos en sus parámetros.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente
a -qisolated_call. En su lugar, marque las funciones con el atributo de función
__attribute__((pure)) .
Información relacionada
• “#pragma llamada_aislada” en la página 35
• Documentación en línea de GCC
Información relacionada
• Documentación en línea de GCC
-qkeepparm
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qkeepparm especifica si los parámetros
de procedimiento se almacenan en la pila cuando se utilizan con -O2 o un nivel de optimización superior.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente a
-qkeepparm. Una solución temporal es compilar el programa sin la optimización habilitada.
-qlargepage
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qlargepage aprovecha las páginas
grandes para las aplicaciones que están diseñadas para ejecutarse en un entorno de memoria de páginas
grandes.
IBM Open XL C/C++ for AIX 17.1.1 no tiene una opción que sea funcionalmente equivalente a
-qlargepage. Para que la aplicación utilice páginas grandes, las páginas grandes deben estar
configuradas en el sistema y debe enlazar la aplicación con -Wl,-blpdata. Consulte Páginas grandes en
la documentación del sistema operativo AIX para obtener más detalles.
-qlonglong
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qlonglong permite tipos enteros IBM
long long en el programa.
En IBM Open XL C/C++ for AIX 17.1.1, el tipo long long está permitido de forma predeterminada.
-qmakedep
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qmakedep genera los archivos de
dependencia que utiliza la herramienta make para cada archivo de origen.
En IBM Open XL C/C++ for AIX 17.1.1, la familia de opciones -M consigue el efecto similar de
-qmakedep.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qminimaltoc
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qminimaltoc garantiza que el
compilador cree sólo una entrada TOC para cada unidad de compilación. La especificación de esta
opción puede minimizar el uso de entradas de tabla de contenido disponibles. Además, el compilador ha
utilizado -qpic=large para dar soporte a TOC más grandes en AIX.
El método de utilizar -qminimaltoc para reducir el número de entradas TOC en AIX ya no está
soportado en IBM Open XL C/C++ for AIX 17.1.1. Para permitir que los programas den soporte a TOC
grandes, especifique las opciones -mcmodel=large y -Wl,-bbigtoc en IBM Open XL C/C++ for AIX
17.1.1.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Información relacionada
• “#pragma namemangling (solo C++), #pragma namemanglingrule (solo C++)” en la página 37
Información relacionada
• “#pragma object_model (solo C++)” en la página 38
-qoptimizar
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qoptimize especifica si se debe
optimizar el código durante la compilación y, si es así, en qué nivel.
Si estaba utilizando -qoptimize en IBM XL C/C++ for AIX 16.1.0 o releases anteriores, utilice --
optimize=<nivel>, -O0, -O1, -O2, -O2o -Ofast en IBM Open XL C/C++ for AIX 17.1.1 para conseguir el
mismo efecto.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qppline
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -q[no]ppline habilita o inhabilita la
generación de directivas #line cuando se utiliza con la opción -E o -P .
En IBM Open XL C/C++ for AIX 17.1.1, utilice -E -P para suprimir las directivas #line que emiten para
obtener un efecto similar a -qnoppline.
Nota: La opción -P en IBM Open XL C/C++ for AIX 17.1.1 tiene un significado completamente
diferente de la opción IBM XL C/C++ for AIX 16.1.0de -P . En IBM Open XL C/C++ for AIX 17.1.1, el
comportamiento de -P es coherente con el de GCC, que inhabilita los marcadores de línea en la salida
preprocesada para el compilador.
-qprefetch
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qprefetch inserta automáticamente
instrucciones de captación previa cuando hay oportunidades de mejorar el rendimiento del código.
IBM Open XL C/C++ for AIX 17.1.1 no proporciona opciones funcionalmente equivalentes a
-qprefetch=[no]assistthread y -qprefetch=[no]aggressive. En IBM Open XL C/C++ for AIX
17.1.1, especifique la opción -mllvm -ppc-set-dscr=<n> para establecer el registro de control de
secuencia de datos (DSCR). Para una compilación LTO , especifique -Wl,-bplugin_opt:--ppc-set-
dscr=<n> en el paso de enlace.
Información relacionada
• -mllvm
• “Optimización de tiempo de enlace (LTO)” en la página 58
Información relacionada
• “Prioridad #pragma (solo C++)” en la página 38
• Documentación en línea de GCC
-qrestrict
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, podría utilizar la opción -qrestrict para implicar
que los parámetros de tipo de puntero en todas las funciones tenían la palabra clave restrict .
En IBM Open XL C/C++ for AIX 17.1.1, utilice -frestrict-args para conseguir el mismo efecto.
Información relacionada
• -frestrict-args
-qsimd
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qsimd=noauto inhabilitaba la
conversión de operaciones de matriz de bucle en instrucciones de vector.
En IBM Open XL C/C++ for AIX 17.1.1, utilice las opciones -fno-vectorize y -fno-slp-vectorize
para conseguir el mismo efecto para inhabilitar las características de vectorización automática.
Información relacionada
• “#pragma nosimd” en la página 37
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qsmp
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a transformaciones de paralelización automática ni a
OpenMP. La opción -qsmp no está disponible en IBM Open XL C/C++ for AIX 17.1.1.
-qsourcetype
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qsourcetype indica al
compilador que trate todos los archivos de origen reconocidos como un tipo de origen especificado,
independientemente del sufijo de nombre de archivo real. Todos los archivos de origen que siguen a
-qsourcetype=assembler se compilan como si fueran archivos de origen de lenguaje ensamblador.
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, los archivos con el sufijo .S o .s se preprocesan
antes de pasarse al ensamblador. En IBM Open XL C/C++ for AIX 17.1.1, sólo se pueden preprocesar los
archivos con el sufijo .S . Por lo tanto, si es necesario preprocesar un archivo .s , cámbiele el nombre al
archivo .S o utilice la opción -x assembler-with-cpp para permitir que el compilador lo trate como
un archivo fuente de lenguaje ensamblador.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qstatsym
IBM Open XL C/C++ for AIX 17.1.1 genera variables estáticas como símbolos en la tabla de símbolos
cuando el compilador no realiza optimizaciones. Si ha utilizado -qstatsym en IBM XL C/C++ for AIX
16.1.0 o releases anteriores, compile el programa sin optimización habilitada al migrar el programa a IBM
Open XL C/C++ for AIX 17.1.1.
-qestricto
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, -O3 implica -qnostrict, que habilita muchas
optimizaciones de coma flotante. Sin embargo, en IBM Open XL C/C++ for AIX 17.1.1, -O3 no habilita la
mayoría de las optimizaciones de coma flotante que habilitaron los releases anteriores. Para habilitar más
optimizaciones de coma flotante en IBM Open XL C/C++ for AIX 17.1.1, realice los pasos siguientes:
1. Especifique -O3 para permitir que el programa produzca los resultados esperados.
2. Especifique -Ofast para optimizar más el programa.
3. Inhabilite de forma selectiva determinados tipos de optimizaciones de coma flotante con una o más
de las opciones siguientes si surgen problemas de corrección al pasar de -O3 a -Ofast. Lograr el
equilibrio adecuado entre precisión y velocidad.
• -f[no-]honor-infinities
• -f[no-]honor-nans
• -f[no-]math-errno
• -f[no-]finite-math-only
• -f[no-]associative-math
• -f[no-]reciprocal-math
• -f[no-]signed-zeros
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-qtbtable
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qtbtable controla la cantidad de
información de rastreo inverso de depuración que se incluye en los archivos de objeto.
En IBM Open XL C/C++ for AIX 17.1.1, las tablas de rastreo inverso de función completa están habilitadas
de forma predeterminada.
Información relacionada
• -mllvm
-qtls
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qtls habilita el reconocimiento del
especificador de clase de almacenamiento __thread , que designa las variables que se van a asignar al
almacenamiento local de hebras y especifica el modelo de almacenamiento local de hebras que se va a
utilizar.
-ftls-model es funcionalmente equivalente a -qtls. En IBM Open XL C/C++ for AIX 17.1.1, sólo se da
soporte a la subopción global-dynamic de esta opción. Los otros modelos tls como local-dynamic y
initial-exec no están soportados.
Nota: Para utilizar -ftls-model, se necesita -pthread . -pthread está implícito cuando el compilador
es invocado por ibm-clang_r y ibm-clang++_r, pero no implícito cuando el compilador es invocado por
ibm-clang.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Información relacionada
• Documentación en línea de GCC
-qunroll
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, el despliegue automático se habilita mediante la
opción -qunroll=auto en -O2 o superior.
En IBM Open XL C/C++ for AIX 17.1.1, el despliegue automático está habilitado de forma predeterminada
en -O2 o superior. También puede habilitar el despliegue automático en -O1 especificando la opción
Información relacionada
• #pragma unroll
-qutf
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -qutf habilita el reconocimiento de la
sintaxis literal UTF.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a una opción funcionalmente equivalente a -qutf. El
soporte literal de UTF viene determinado por el nivel de lenguaje que está en vigor.
-v, -V
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -v o -V informa del progreso de
la compilación nombrando los programas que se invocan y las opciones que se especifican en cada
programa.
En IBM Open XL C/C++ for AIX 17.1.1, utilice la opción -v en su lugar. Su formato y los pasos de
compilación son algo diferentes de los de -v o -V en los releases anteriores.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
-y
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, la opción -y especifica la modalidad de redondeo
para el compilador cuando el compilador evalúa expresiones de coma flotante constante en el tiempo de
compilación.
En IBM Open XL C/C++ for AIX 17.1.1, -y no está soportado. No hay ninguna opción para controlar
la modalidad de redondeo de evaluación de coma flotante en tiempo de compilación. La opción Clang
-frounding-math le ofrece la posibilidad de inhabilitar el optimizador para que no pueda plegar
valores de coma flotante que no se pueden representar exactamente; sin embargo, esto podría dar como
resultado un rendimiento de tiempo de ejecución más lento.
La macro FE_TONEAREST , que está disponible en IBM Open XL C/C++ for AIX 17.1.1, coincide con la
semántica de -y . En IBM Open XL C/C++ for AIX 17.1.1, el repliegue de coma flotante que necesitan las
características de lenguaje como, por ejemplo, la inicialización de variables de coma flotante global, se
realiza a través de FE_TONEAREST.
Información relacionada
• "Manual del usuario del compilador Clang" en la documentación de Clang
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Pragmas de compilador
Tenga en cuenta una serie de cambios en los pragmas de compilador cuando migre el programa desde
IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++ for AIX 17.1.1.
Clang pragmas
Los Clang pragmas de comunidad para LLVM Clang en AIX están soportados en IBM Open XL C/C++ for
AIX 17.1.1.
Información relacionada
• “-qalloca, -ma (solo C)” en la página 18
• __builtin_alloca
#pragma caracteres
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma chars determina si todas las variables
de tipo char se tratan como signed o unsigned.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma chars. Sin embargo, puede utilizar la
opción -fsigned-char o -funsigned-char Clang para conseguir el mismo efecto.
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Comentario de #pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma comment coloca un comentario en
módulos de objeto para indicar el programa y la información del compilador como, por ejemplo, la versión
del compilador.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma comment. Sin embargo, cuando el
compilador utiliza el ensamblador del sistema AIX , la serie de versión del compilador se incorpora en la
Información relacionada
• Documentación en línea de GCC
#pragma desarticulado
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma disjoint lista los identificadores
que no tienen alias entre sí dentro del ámbito de su uso. Esta directiva pragma proporciona más
oportunidades para las optimizaciones informando al compilador de que ninguno de los identificadores
listados en la directiva pragma comparte el mismo almacenamiento físico.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma disjoint. Se recomienda utilizar el
calificador de tipo restrict para programas C o el calificador de tipo __restrict__ para programas
C/C++ para afirmar que los puntos no tienen alias.
Información relacionada
• Documentación en línea de GCC
Enumeración #pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma enum es funcionalmente equivalente a la
opción -qenum . Especifica la cantidad de almacenamiento ocupado por las enumeraciones.
En IBM Open XL C/C++ for AIX 17.1.1, utilice -fshort-enums como una opción funcionalmente
equivalente a -qenum=small. No se da soporte a otras subopciones de -qenum . Para programas C+
+, también puede utilizar la característica de enumeración con ámbito C++11 para especificar el tipo
subyacente de enumeraciones.
Información relacionada
• “-qenum” en la página 19
• Documentación en línea de GCC
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
#pragma frecuencia_ejecución
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma execution_frequency marca
programas que espera que se ejecuten con mucha frecuencia o con poca frecuencia.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma execution_frequency. En su lugar, se
recomienda utilizar la función incorporada __builtin_expect .
Información relacionada
• La función incorporada __builtin_esperada
Información relacionada
• #__builtin_expect
Información relacionada
• Documentación en línea de GCC
Información relacionada
• #pragma Push de visibilidad de GCC, #pragma pop de visibilidad de GCC
Información relacionada
• "Manual del usuario del compilador Clang" en la documentación de Clang
Información relacionada
• Documentación en línea de GCC
Información relacionada
• “Control de mensajes de diagnóstico” en la página 56
• La sección "Distintivos de diagnóstico en Clang" en la Documentación de Clang
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
#pragma llamada_aislada
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma isolated_call especifica funciones
que no tienen efectos secundarios en el archivo de origen que no sean los implícitos por sus parámetros.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma isolated_call. En su lugar, se
recomienda utilizar el atributo de función __attribute__((pure)) .
Información relacionada
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
#pragma hojas
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma leaves informa al compilador de que
una función con nombre nunca vuelve a la instrucción después de una llamada a dicha función.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma leaves. Se recomienda utilizar el atributo
de función __attribute__((noreturn)) o #pragma clang attribute en su lugar.
Información relacionada
• Documentación en línea de GCC
• La sección "Atributo clang de#pragma " en la Documentación de Clang
Mapa de #pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma map convierte todas las referencias a un
identificador en otro identificador definido externamente.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma map. Se recomienda utilizar el atributo de
función _attribute__((alias)) o las etiquetas GNU asm como alternativas. Por ejemplo, sustituya
#pragma map(foo, "bar") por asm("bar") cuando migre el siguiente ejemplo de código de IBM XL
C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++ for AIX 17.1.1.
Programa original en IBM XL C/C++ for AIX 16.1.0
Información relacionada
• "ASM Ir con restricciones de salida" en la documentación de Clang
• Sentencias de ensamblaje en línea
#pragma func mc
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma mc_func le permite incluir una
secuencia corta de instrucciones de máquina "en línea" en el código fuente del programa.
Información relacionada
• "ASM Ir con restricciones de salida" en la documentación de Clang
• Sentencias de ensamblaje en línea
Información relacionada
• “-qnamemangling (solo C++)” en la página 25
Información relacionada
• “-qfunctrace” en la página 21
• Documentación en línea de GCC
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
#pragma nosimd
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma nosimd inhabilita la generación
automática de instrucciones de vector. Esta directiva pragma debe especificarse por bucle.
IBM Open XL C/C++ for AIX 17.1.1 acepta #pragma nosimd y lo correlaciona con la directiva
pragma #pragma clang loop vectorize(disable) Clang. Si ha utilizado #pragma nosimd en
el programa, se recomienda sustituirlo por #pragma clang loop vectorize(disable) al migrar el
programa a IBM Open XL C/C++ for AIX 17.1.1.
Información relacionada
• “-qsimd” en la página 26
• "Manual del usuario del compilador Clang" en la documentación de Clang
Información relacionada
• “-qobjmodel (sólo C++)” en la página 25
• “Control de mensajes de diagnóstico” en la página 56
• La sección "Distintivos de diagnóstico en Clang" en la Documentación de Clang
option_override de #pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma option_override le permite
especificar opciones de optimización a nivel de subprograma que alteran temporalmente las opciones
de optimización dadas en la línea de mandatos. Esta directiva pragma permite un control más preciso
de la optimización del programa y puede ayudar a depurar los errores que se producen sólo bajo la
optimización.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma option_override. Si ha especificado
pragma options_override(func, "opt(level, 0)") en el programa para inhabilitar la
optimización para una función específica, utilice __attribute__((optnone)) como alternativa al
migrar el programa desde IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++
for AIX 17.1.1.
Información relacionada
• Documentación en línea de GCC
#pragma reg_killed_by
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma reg_killed_by especifica registros
que pueden ser alterados por funciones especificadas por #pragma mc_func.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma mc_func, por lo que #pragma
reg_killed_by no es necesario. Si utiliza etiquetas asm en línea en lugar de #pragma mc_func en
IBM Open XL C/C++ for AIX 17.1.1, puede utilizar la lista de clobber para especificar qué registros se
modifican.
Información relacionada
• “#pragma func mc” en la página 36
• Sentencias de ensamblaje en línea
• "ASM Ir con restricciones de salida" en la documentación de Clang
#pragma nivel_simple
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma simd_level controla la generación de
código de compilador de instrucciones vectoriales para bucles individuales.
Al migrar el programa desde IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL
C/C++ for AIX 17.1.1, puede sustituir #pragma simd_level(0) o #pragma nosimd por #pragma
clang loop vectorize(disabled) y sustituir #pragma simd_level(10) por #pragma clang
loop vectorize(enable) respectivamente. IBM Open XL C/C++ for AIX 17.1.1 no tiene pragmas de
correlación para #pragma simd_level cuando el nivel simd es de 1 a 9, inclusive.
Información relacionada
• "Manual del usuario del compilador Clang" en la documentación de Clang
Series #pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma strings especifica el tipo de
almacenamiento para literales de serie. Cuando #pragma strings(readonly) está en vigor, las series
se colocan en memoria de sólo lectura. Cuando #pragma strings(writeable) está en vigor, las
series se colocan en memoria de lectura-escritura.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma strings. Todas las series se colocan en
memoria de sólo lectura.
#pragma
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma unrollandfuse indica al compilador
que intente una operación de deshacer y fusionar en bucles for anidados.
Información relacionada
• “-qunroll” en la página 28
• "Manual del usuario del compilador Clang" en la documentación de Clang
#pragma débil
En IBM XL C/C++ for AIX 16.1.0 o releases anteriores, #pragma weak impide que el enlazador emita
mensajes de error si encuentra un símbolo definido por multiplicación durante el enlace, o si no
encuentra una definición para un símbolo.
IBM Open XL C/C++ for AIX 17.1.1 no da soporte a #pragma weak. Se recomienda utilizar el
atributo __attribute__((weak)) o #pragma clang attribute push ([[weak]], apply_to
= any(function)) como alternativas.
Información relacionada
• Documentación en línea de GCC
• "Manual del usuario del compilador Clang" en la documentación de Clang
Macros de compilador
Tenga en cuenta una serie de cambios en las macros del compilador cuando migre el programa desde
IBM XL C/C++ for AIX 16.1.0 o releases anteriores a IBM Open XL C/C++ for AIX 17.1.1.
Al migrar programas al release más reciente, este cambio puede provocar incompatibilidad. Se
recomienda cambiar el código de acuerdo con el nuevo comportamiento.
Para obtener más información, consulte vec_cntlz en la publicación IBM Open XL C/C++ Guía del
usuario.
Para compilar el código fuente que utiliza los nombres antiguos de las funciones incorporadas con IBM
Open XL C/C++ for AIX 17.1.1, realice una de las acciones siguientes:
• Defina las macros en la línea de mandatos.
Por ejemplo:
-D__alignx=__builtin_ppc_alignx
Enlace de programa
Tenga en cuenta los cambios en el enlace de programa cuando migre el programa a IBM Open XL C/C++
for AIX 17.1.1.
No se recomienda especificar la opción de enlazador -bcdtors:csect para el código de objeto
generado por IBM Open XL C/C++ for AIX 17.1.1. De lo contrario, puede provocar bloqueos o resultados
incorrectos en tiempo de ejecución. Para evitar este problema, utilice -bcdtors:mbr en su lugar en el
paso de enlace.
En IBM Open XL C/C++ for AIX 17.1.1, muchas bibliotecas ya no están enlazadas implícitamente, como
libatomic y libm. Si las operaciones relacionadas con estas bibliotecas se utilizan en el programa,
especifique las opciones de enlace correspondientes de forma explícita, como -latomic y -lm.
Información relacionada
• Diagnósticos de observación LLVM
Información relacionada
• Soporte de proceso de vectores
• Funciones incorporadas de vector
//t.c
#include <stdio.h>
void f(int x) {
printf("%f", x);
}
ibm-clang t.c -c
t.c:3:30: warning: format specifies type 'double' but the argument has type 'int' [-Wformat]
Información relacionada
• La sección "Distintivos de diagnóstico en Clang" en la Documentación de Clang
Soporte de depuración
Utilice la opción -g para habilitar el soporte de depuración. En IBM XL C/C++ for AIX 16.1.0 y releases
anteriores, se daba soporte a los formatos de información de depuración stabstrings y DWARF y el valor
predeterminado era stabstrings.
IBM Open XL C/C++ for AIX 17.1.1 sólo da soporte al formato de información de depuración DWARF y la
versión predeterminada de DWARF es DWARF 3.
En IBM Open XL C/C++ for AIX 17.1.1, puede utilizar las opciones siguientes para conmutar versiones de
DWARF:
• -gdwarf-2
• -gdwarf, -gdwarf-3
• -gdwarf-4
IBM Open XL C/C++ for AIX 17.1.1 puede generar información DWARF ajustada para los depuradores
siguientes:
• El depurador DBX utilizando la opción -gdbx , que es el valor predeterminado
• Depurador GDB utilizando la opción -ggdb
Nota: El release actual de DBX no da soporte a la información de DWARF generada por IBM Open XL
C/C++ for AIX 17.1.1. Está previsto un futuro release de DBX para añadir este soporte.
Información relacionada
• -g en IBM Open XL C/C++ Guía del usuario
• La sección "Referencia de argumentos de línea de mandatos de Clang" en la Documentación de Clang
Asignación de memoria
Puede haber problemas de asignación de memoria de almacenamiento dinámico al migrar el programa a
IBM Open XL C/C++ for AIX 17.1.1.
Soporte de OpenMP
OpenMP no está soportado en IBM Open XL C/C++ for AIX 17.1.1.
• Errores de enlazador:
PGO está soportado en IBM Open XL C/C++ for AIX 17.1.1. Existen dos formas de generar y utilizar datos
de perfil. Para obtener más información sobre PGO, consulte la sección "Optimización guiada de perfil" en
la Documentación de Clang. Los archivos de datos PGO generados en IBM Open XL C/C++ for AIX 17.1.1
son incompatibles con los archivos PDF de IBM XL C/C++ for AIX 16.1.0 o releases anteriores.
Los mandatos cleanpdf, showpdfy mergepdf se sustituyen por el programa de utilidad ibm-llvm-
profdata en IBM Open XL C/C++ for AIX 17.1.1.
Ejemplo:
$ cat x.c
#include <stdio.h>
#include <stdlib.h>
Para habilitar la instrumentación PGO e indicar al compilador que instrumente el código que se
está compilando, especifique la opción -fprofile-generate[=<directory>] . Si se especifica un
directorio, el archivo de perfil sin formato se almacena en ese directorio. De lo contrario, se almacena en
el directorio actual. El archivo de perfil sin formato se denomina default_%m.profraw.
Una vez generado el archivo de perfil sin formato, ejecute el programa de utilidad ibm-llvm-profdata
en el archivo de perfil sin formato para que el compilador pueda consumirlo. Tenga en cuenta que este
paso es necesario incluso cuando sólo hay un perfil en bruto, ya que la operación de fusión también
cambia el formato de archivo.
Para indicar al compilador que utilice los datos de instrumentación para optimizar el programa,
especifique la opción -fprofile-use[=<merge profile file path>] , donde merge profile
file path es la ubicación de archivo del archivo de perfil fusionado. Si merge profile file
path es un directorio u se omite, se presupone que el nombre del archivo de perfil fusionado es
default.profdata.
Variables no inicializadas
IBM Open XL C/C++ for AIX 17.1.1 habilita optimizaciones más agresivas que IBM Open XL C/C++ 17.1.0
y releases anteriores. Como resultado, los errores en los programas, como el comportamiento no definido
debido al uso de variables no inicializadas, son más propensos a causar errores.
Información relacionada
• Soporte mejorado de LLVM y Clang
En las secciones siguientes se describen algunas de las dificultades comunes que implican estas
diferencias, así como las prácticas de programación recomendadas para ayudarle a evitar la mayoría
de estos problemas:
• “Asignación de valores largos” en la página 63
• “Asignación de punteros” en la página 65
• “Alineación de datos agregados” en la página 66
• “Llamada al código Fortran” en la página 66
long l=valueL<<1;
Asignación de punteros
En la modalidad de 64 bits, los punteros y los tipos int ya no tienen el mismo tamaño.
Las implicaciones de esto son las siguientes:
• El intercambio de punteros y tipos int provoca errores de segmentación.
• Pasar punteros a una función que espera un tipo int da como resultado un truncamiento.
• Las funciones que devuelven un puntero pero que no están explícitamente prototipos como tales,
devuelven un int en su lugar y truncan el puntero resultante, tal como se ilustra en el ejemplo
siguiente.
En C, el código siguiente es válido en modalidad de 32 bits sin un prototipo:
a=(char*) calloc(25);
Sin un prototipo de función para calloc, cuando el mismo código se compila en modalidad de 64 bits,
el compilador presupone que la función devuelve un int, por lo que a se trunca de forma silenciosa y, a
continuación, se amplía el signo. La conversión de tipo de datos del resultado no impide el truncamiento,
ya que la dirección de la memoria asignada por calloc ya se ha truncado durante la devolución. En
este ejemplo, la mejor solución es incluir el archivo de cabecera, stdlib.h, que contiene el prototipo
Nota:
1. El módulo intrínseco ISO_C_BINDING proporciona c_PTR.
Para consultas sobre licencias en las que se solicite información sobre juegos de caracteres de doble byte
(DBCS), póngase en contacto con el departamento de propiedad intelectual de IBM de su país o envíe sus
consultas, por escrito, a la dirección siguiente:
El siguiente párrafo no se aplica al Reino Unido ni a ningún otro país donde tales disposiciones
estén en contradicción con la legislación local: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROPORCIONA ESTA PUBLICACIÓN "TAL CUAL" SIN GARANTÍAS DE NINGUNA CLASE, YA SEAN
EXPRESAS O IMPLÍCITAS, INCLUIDAS, PERO SIN LIMITARSE A, LAS GARANTÍAS IMPLÍCITAS DE NO
INFRACCIÓN, COMERCIALIZACIÓN O IDONEIDAD PARA UN FIN DETERMINADO. Algunos países no
permiten la renuncia a garantías explícitas o implícitas en ciertas transacciones, por lo que la declaración
anterior puede no aplicarse en su caso.
Esta información puede contener imprecisiones técnicas o errores tipográficos. La información incluida
en este documento está sujeta a cambios periódicos, que se incorporarán en nuevas ediciones de la
publicación. IBM puede efectuar mejoras y/o cambios en los productos y/o programas descritos en esta
publicación en cualquier momento y sin previo aviso.
Las referencias contenidas en esta información a sitios web que no son deIBM se proporcionan
únicamente para su comodidad y no constituyen en modo alguno un aval de dichos sitios web de . Los
materiales de dichos sitios web no forman parte de los materiales para este producto IBM y el uso de
dichos sitios web es a cuenta y riesgo del usuario.
IBM puede utilizar o distribuir la información que usted le suministre del modo que IBM considere
conveniente sin incurrir por ello en ninguna obligación para con usted.
Los licenciatarios de este programa que deseen tener información sobre él con el fin de habilitar: (i) el
intercambio de información entre programas creados independientemente y otros programas (incluido
éste) y (ii) el uso mutuo de la información que se ha intercambiado, deben ponerse en contacto con:
Esta información puede estar disponible, sujeta a los términos y condiciones adecuados, y puede incluir
en algunos casos el pago de una tarifa.
IBM proporciona el programa bajo licencia que se describe en esta información y todo el material bajo
licencia disponible bajo los términos del acuerdo IBM Customer Agreement, IBM International Program
License Agreement o de cualquier acuerdo equivalente entre las partes.
Todos los datos de rendimiento contenidos en el presente documento se han obtenido en un entorno
controlado. Por tanto, los resultados obtenidos en otros entornos operativos pueden variar de forma
significativa. Algunas de las medidas podrían proceder de sistemas en proceso de desarrollo y no se
garantiza que dichas medidas sean las mismas en sistemas disponibles para uso general. Además, es
posible que algunas de las medidas se hayan estimado a través de una extrapolación. Los resultados
reales pueden variar. Los usuarios de este documento deben consultar los datos que corresponden a su
entorno específico.
La información relacionada con productos que no son de IBM se ha obtenido de los proveedores de
dichos productos, de sus anuncios publicados o de otras fuentes de disponibilidad pública. IBM no ha
probado estos productos y no puede confirmar la precisión de su rendimiento, compatibilidad o cualquier
otro aspecto relacionado con los productos que no son de IBM. Las preguntas sobre las posibilidades de
productos que no son de IBM deben dirigirse a los proveedores de esos productos.
Todas las declaraciones sobre la futura dirección o intención de IBM están sujetas a cambios o a la
retirada sin previo aviso, y sólo representan finalidades y objetivos.
Esta información contiene ejemplos de datos e informes utilizados en operaciones comerciales diarias.
Para ilustrarlos de la forma más completa posible, los ejemplos incluyen nombres de personas,
empresas, marcas y productos. Todos estos nombres son ficticios y cualquier parecido con los nombres y
direcciones utilizados por una empresa real es mera coincidencia.
LICENCIA DE DERECHOS DE AUTOR:
Esta información contiene programas de aplicación de ejemplo en lenguaje fuente, que muestran técnicas
de programación en varias plataformas operativas. Puede copiar, modificar y distribuir estos programas
de muestra de cualquier forma sin pagar ninguna cuota a IBM, para fines de desarrollo, uso, marketing o
distribución de programas de aplicación que se ajusten a las interfaces de programación de aplicaciones
para la plataforma operativa para la que se han escrito los programas de muestra. Estos ejemplos no se
han probado exhaustivamente bajo todas las condiciones. Por lo tanto, IBM no puede garantizar ni dar
por supuesta la fiabilidad, la capacidad de servicio ni la funcionalidad de estos programas. Los programas
de ejemplo se proporcionan "TAL CUAL", sin garantía de ningún tipo. IBM no será responsable de ningún
daño resultante del uso de los programas de ejemplo.
Cada copia o parte de estos programas de ejemplo, así como todo trabajo derivado, debe incluir un aviso
de copyright como el siguiente:
© (nombre de la empresa) (año). Las partes de este código se derivan de IBM Corp. Programas de
ejemplo. © Copyright IBM Corp. 1998, 2022.
CONSIDERACIONES SOBRE LA POLÍTICA DE PRIVACIDAD:
Los productos de software de IBM , incluido el software como soluciones de servicio, ("Ofertas de
software") pueden utilizar cookies u otras tecnologías para recopilar información de uso del producto,
para ayudar a mejorar la experiencia del usuario final o para adaptar las interacciones con el usuario
final, o para otros fines. En muchos casos, las ofertas de software no recopilan información de
identificación personal. Algunas de nuestras ofertas de software pueden ayudarle a recopilar información
de identificación personal. Si esta oferta de software utiliza cookies para recopilar información de
Marcas comerciales
IBM, el logotipo de IBM e ibm.com son marcas registradas de International Business Machines Corp.
registradas en muchas jurisdicciones en todo el mundo. Otros nombres de productos y servicios pueden
ser marcas comerciales de IBM o de otras empresas. Hay disponible una lista actual de marcas
registradas de IBM en la web en "Copyright and trademark information" en http://www.ibm.com/legal/
copytrade.shtml.
Adobe y el logotipo de Adobe son marcas registradas o marcas registradas de Adobe Systems
Incorporated en Estados Unidos o en otros países.
Intel, el logotipo de Intel, Intel Inside, el logotipo de Intel Inside, Intel Centrino, el logotipo de Intel
Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium y Pentium son marcas registradas o marcas
comerciales registradas de Intel Corporation o de sus filiales en Estados Unidos Y/o en otros países.
UNIX es una marca registrada de The Open Group en Estados Unidos y otros países.
Avisos 69
70 IBM Open XL C/C++: Guía de migración
Índice
B O
bibliotecas compartidas 3 Opciones de Clang 3, 4, 48, 58
Built-in Functions Opciones de LLVM 58
no soportado 44 Optimización de LLVM 58
Optimización de tiempo de enlace 58
optimización guiada de perfil 1
C Optimización guiada por perfil 16, 59
c + + filt name demangling, programa de utilidad 2
cambio de bits 65 P
cleanpdf 2
Comentarios dirigidos por perfil 59 pragmas
compatibilidad binaria 1 no soportado 30
Programa de utilidad linkxlC 2
Programa de utilidad makeC+ +SharedLib 2
D
Depuración de DWARF 57 S
Depurador DBX 57
Depurador de GDB 57 Showpdf 2
G T
genhtml 2 Tipos de datos Fortran 66
H X
herramienta de informes de utilización 2 xlc 2
xlC 2
xlclang 2
I xlclang + + 2
ibm-clang 2
ibm-clang + + _r 3
ibm-clang++_r 2
L
linkxlC 3
LVM 1
M
macros 40, 43, 57
makeC++SharedLib 3
mandatos de invocación 2
Mensajes de
diagnóstico 56
MENSAJES DIAGNOSTICO 56
mergepdf 2
migración 53
Modalidad de 32 bits
cambio de bits 65
modalidad de 64 bits
cambio de bits 65
Índice 71
72 IBM Open XL C/C++: Guía de migración
IBM®
GC28-3309-01