什么';What’检查uu restrict关键字可用性的好方法是什么?
我正在寻找一组什么';What’检查uu restrict关键字可用性的好方法是什么?,c,visual-studio,gcc,c89,restrict-qualifier,C,Visual Studio,Gcc,C89,Restrict Qualifier,我正在寻找一组#ifdef,以检查GCC和visualstudio的u restrict关键字的可用性。我假设它需要检查编译器版本,但我不知道它是为哪个版本引入的。有人能帮我吗 更新:当编译为C89时,这必须(并且只需要)起作用!因此,我不能依赖于表示C99或C99支持的\uu STDC\u VERSION.。IMHO应在所有标准编译器中为两个C/C++程序提供。它在某种程度上类似于C99限制 只需使用C99标准关键字限制,并可能将其定义为其他内容 您可以测试C99是否符合要求,例如: #if
#ifdef
,以检查GCC和visualstudio的u restrict
关键字的可用性。我假设它需要检查编译器版本,但我不知道它是为哪个版本引入的。有人能帮我吗
更新:当编译为C89时,这必须(并且只需要)起作用!因此,我不能依赖于表示C99或C99支持的
\uu STDC\u VERSION.
。IMHO应在所有标准编译器中为两个C/C++程序提供。它在某种程度上类似于C99限制 只需使用C99标准关键字限制
,并可能将其定义为其他内容
您可以测试C99是否符合要求,例如:
#if __STDC__ != 1
# error not conforming
# define restrict __restrict /* use implementation __ format */
#else
# ifndef __STDC_VERSION__
# error not conforming
# define restrict __restrict /* use implementation __ format */
# else
# if __STDC_VERSION__ < 199901L
# error Compiler for C before C99
# define restrict __restrict /* use implementation __ format */
# else
# /* all ok */
# endif
# endif
#endif
int fx(int *restrict a, char *restrict b) {
*b = *a;
return 0;
}
int main(void) {
int a[1];
char b[1];
fx(a, b);
return 0;
}
#如果1.
#错误不符合
#定义限制\uuuu限制/*使用实现\uuuuuu格式*/
#否则
#ifndef\uU STDC\u版本__
#错误不符合
#定义限制\uuuu限制/*使用实现\uuuuuu格式*/
#否则
#如果STDC版本小于199901L
#C99之前的C编译器错误
#定义限制\uuuu限制/*使用实现\uuuuuu格式*/
#否则
#/*一切正常*/
#恩迪夫
#恩迪夫
#恩迪夫
int-fx(int*restrict a,char*restrict b){
*b=*a;
返回0;
}
内部主(空){
int a[1];
charb[1];
外汇(a、b);
返回0;
}
当然,
#错误应该在工作版本中编辑掉在“配置、制作、制作安装”场景中,这应该在“配置”中进行检查configure“应该在config.h中定义一个”HAS_RESTRICT“。这应该依次在标题中检查,以定义合适的宏
对于visual studio,我没有任何想法..:(我是如何修复的:
#if defined(__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
# define SKP_restrict __restrict
#elif defined(_MSC_VER) && _MSC_VER >= 1400
# define SKP_restrict __restrict
#else
# define SKP_restrict
#endif
我认为<代码>限制VS.NET >是一个C++标准认可的关键字。没关系。我需要这个也适用于C和旧的编译器版本(Visual Studio 98)。Visual Studio 98是什么意思?我不知道这样的版本存在。在Visual Studio 2002之前只有Visual Studio 6和它的C++编译器是如此的不安全,支持它不应该是必要的,因为它基本上排除了使用现代C++。@ IAMMLIN:你错了。下划线把它给了。@ Tomalak,意思是C99中有一个关键字叫做“代码>限制<代码> > C++?“对吗?它不适用于例如Visual Studio 98,我也需要能够使用它进行构建。好的,我不确定C99之前的任何内容。正如我在上面的链接中所提到的,\u restrict
在C99之后可用。我们在我们的商店中不使用C99-只使用C89,现在我计划添加restrict关键字作为可选的编译器扩展。这个。测试。”用于功能,而不是版本。但它如何转化为Microsoft world?