我使用一个特定的库,它有几种编译方式(特定于平台和特定于目标的代码),因此,有时在归档中有完全空的.c文件; 代码简直就是#ifdef'd.这是完全理解的,而不是一个错误:我想这样.在Linux上,这确实不是问题.如果这是一个问题,链接器会捕获它.
然而,Mac OS上的ranlib/ar无法令人信服地压制这些文件的"无符号"警告.
现在,我是一名工程师,我想完全无警告地运行我的编译过程.这是将要评估的关键代码; 如果我有警告,人们会看着我好笑.是否有一些我忽略的东西?一些命令行选项?
谢谢,
KJ
我前几天在stackoverflow上找到了这个片段(谢谢你):
#define PLATFORM 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)
extern void PLATFORMSPECIFIC(somefunc)(char *x);
Run Code Online (Sandbox Code Playgroud)
用gcc -E编译,结果如下:
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"
extern void somefunc_3(char *x);
Run Code Online (Sandbox Code Playgroud)
然而:
#define PLATFORM linux
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y) PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)
extern void PLATFORMSPECIFIC(somefunc)(char *x);
Run Code Online (Sandbox Code Playgroud)
结果是:
# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"
extern void somefunc_1(char *x);
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能让它返回'somefunc_linux'?克朗似乎做对了,顺便说一句.