¿Es aceptable la barra invertida en las directivas #include de C y C++?

¿Es aceptable la barra invertida en las directivas #include de C y C++?


Hay dos separadores de ruta de uso común:la barra diagonal de Unix y la barra diagonal inversa de DOS. Descanse en paz, Classic Mac colon. Si se usa en una directiva #include, ¿son iguales según las reglas de los estándares C++11, C++03 y C99?


Respuestas:


C99 dice (§6.4.7/3):



C++03 dice (§2.8/2):



C++11 dice (§2.9/2):



Por lo tanto, aunque cualquier compilador puede optar por admitir una barra invertida en un #include path, es poco probable que algún proveedor de compiladores no admita la barra diagonal, y es probable que las barras diagonales inversas hagan tropezar algunas implementaciones en virtud de la formación de códigos de escape. (Editar:aparentemente MSVC anteriormente requería una barra invertida. Tal vez otros en plataformas derivadas de DOS eran similares. Hmmm... ¿qué puedo decir?)


C++11 parece para aflojar las reglas, pero "apoyado condicionalmente" no es significativamente mejor que "causa un comportamiento indefinido". El cambio hace más para reflejar la existencia de ciertos compiladores populares que para describir un estándar portátil.


Por supuesto, nada en ninguno de estos estándares dice que existan caminos. Hay son ¡Sistemas de archivos por ahí sin ninguna ruta! Sin embargo, muchas bibliotecas asumen nombres de ruta, incluidos POSIX y Boost, por lo que es razonable querer una forma portátil de referirse a los archivos dentro de los subdirectorios.