__未使用的标志行为/用法(带有Objective-C的GCC)

迈克

我刚刚了解了在使用GCC进行编译时可以使用的__unused标志,我学到的越多,我遇到的问题就越多...

为什么在没有警告/错误的情况下进行编译?我专门告诉编译器我将不会使用变量,这似乎很奇怪,然后当我使用它时,一切照常进行。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self foo:0];
}

- (void)foo:(NSInteger)__unused myInt
{
    myInt++;
    NSLog(@"myInt: %d", myInt);  // Logs '1'
}

另外,以下两个方法签名有什么区别?

- (void)foo:(NSInteger)__unused myInt;

- (void)foo:(NSInteger)myInt __unused;
阿里软件

__unused宏(这实际上是扩大到__attribute__((unused))GCC属性)只告诉编译器:“如果我不使用这个变量不提醒我”。

unused:此属性附加到变量,表示该变量可能未被使用。GCC不会对此变量发出警告。资料来源:gnu.gcc.org doc

因此,此GCC属性是在不使用变量时避免发出警告,而在使用声称未使用的变量时不触发警告


关于在最后一个示例中将属性放在变量名之前或之后,在您的情况下,这两者都被接受并且等效:为了兼容性起见,编译器只宽容该位置(当然,您也可以同时编写const int ior int const i

为了与为未在嵌套声明器上实现属性的编译器版本编写的现有代码兼容,在放置属性时允许一些宽松性来源:gnu.gcc.org doc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C(GCC)中使用char *

来自分类Dev

如何使用带有gcc的pari库运行C程序?

来自分类Dev

我需要带有C11的GCC的-pedantic标志吗?

来自分类Dev

使用C99的Netbeans C GCC

来自分类Dev

使用条件变量(c、gcc)时的意外行为

来自分类Dev

Mac使用gcc运行C程序

来自分类Dev

使用GCC C ++获取Windows版本

来自分类Dev

需要帮助使用gcc编译C程序

来自分类Dev

带有补零的熊猫标志行

来自分类Dev

conda install -c anaconda gcc_linux-64未使用

来自分类Dev

Python / C API gcc编译警告未使用的变量

来自分类Dev

使用gcc和g ++分别编译带有C和C ++文件的项目?

来自分类Dev

Ubuntu 14.04 VM上的GCC 4.8.4错误:未检测到-std = c ++ 11标志

来自分类Dev

使用gcc在C中链接C ++静态库

来自分类Dev

使用GCC在C / C ++中优化循环中的嵌套if语句

来自分类Dev

使用gcc在C中链接C ++静态库

来自分类Dev

gcc 4.8.1中c ++ 11线程的奇怪行为

来自分类Dev

Visual C ++正则表达式行为与GCC

来自分类Dev

Ubuntu 12.04.3:Objective-C中的GCC 4.8.2

来自分类Dev

尝试在Windows上编译GNUstep Objective-C的GCC错误

来自分类Dev

GCC未使用Boost文件夹包含标志

来自分类Dev

是否有gcc / clang标志来验证C ++程序而不进行编译

来自分类Dev

为什么在构建GCC时未禁用C ++库

来自分类Dev

具有#define和碰撞的C ++ GNU GCC

来自分类Dev

具有std = c11 arg的GCC警告

来自分类Dev

具有#define和碰撞的C ++ GNU GCC

来自分类Dev

编译c时使用cygwin“ -bash:gcc:命令未找到”?

来自分类Dev

使用gfortran和gcc从c访问fortran模块数据

来自分类Dev

如何使用C ++概念(“精简概念”)构建gcc?