C代码的可靠可移植性,而不依赖于预处理器

依靠预处理器和预定义的编译器宏来实现可移植性似乎很难管理.什么是实现C项目可移植性的更好方法?我想将特定于环境的代码放在标题中,行为方式相同.有没有办法让构建环境选择要包含哪些标头?

我以为我会将特定于环境的标头放入特定环境的目录中.然后,构建环境只是将标头从平台的目录复制到根目录,构建项目,然后删除副本.

最佳答案
这当然完全取决于您的构建环境,与C本身无关.

您可以尝试的一件事是在makefile中设置包含路径:

INCDIRS=-I ./solaris
#INCDIRS=-I ./windows
#INCDIRS=-I ./linux
:
CC=gcc $(INCDIRS) ...

并取消注释您正在处理的那个.然后将您的平台特定标头放在这些目录中:

./solaris/io.h
./windows/io.h
./linux/io.h

你可以,在紧要关头,甚至有不同的平台makefile,如solaris.mk和windows.mk,而不必编辑任何文件.

但是我没有看到你对预处理器的厌恶,这是它擅长的事情之一,人们几十年来一直在成功地做到这一点.最重要的是,当您的代码需要更改每个平台时会发生什么.您可以将代码抽象为头文件,但这对我来说似乎比一些#ifdef更难管理.

转载注明原文:C代码的可靠可移植性,而不依赖于预处理器 - 代码日志