在C中使用`this`关键字是明智的吗?

YoY*_*nnY 0 c class c99 this

基本上,我在C中有一个内联函数:

struct array {
    unsigned long size;
    void* items;
};
typedef struct array* Array;
inline Array array_create(unsigned long initsize);
inline void  array_free(Array this);
Run Code Online (Sandbox Code Playgroud)

我是否可以this在这种情况下自由使用关键字,或者更好地避免它,以及为什么(不是)?

编辑:这个问题起源于我使用的代码中的一个错误,inline void array_free(Array array);它改变了结果sizeof(array);并给了我使用的想法,this而不是适应(在我看来丑陋)sizeof(struct array);.

Chr*_*ckl 9

它在技术上是正确的,因为C不是C++,因此不是C中this的关键字.

是否明智,现在这是一个不同的问题.如果这段代码有可能被编译为C++,那么调用的标识符this将破坏代码.


Nik*_*iou 6

this以任何方式使用你想要的是完全有效的C.

你有什么要问自己,这些适用于任何C++保留字喜欢的方式class,final等等,就是:

  • 我是否使用突出显示this为关键字的程序来传达错误信息?例如,this即使您在.c文件中,Visual Studio 也会突出显示,因此可能会出现一些混淆.
  • 我计划将来将我的代码推广到C++吗?在这种情况下,你可以做一些额外的工作,这是可以避免的.
  • 我的代码是否与C++交互?这本身不是问题,但您必须记住,您的代码也将与C++程序员交互.并且你不会把那些可能不太了解C的人混淆得非常详细(尽管有人可能会说他们的职责是在他们阅读另一种语言时知道他们在做什么).

既然this是可以避免的东西我发现使用它不道德但不正确.

我不是说你必须在编写C之前学习C++,但是一旦你知道了什么,那么充分利用它就是一个好习惯.

您可能导致的一个微妙问题是使您的代码从C++中"不可调用",例如a

#define this some_definition
Run Code Online (Sandbox Code Playgroud)

在C头文件中,后来包含在C++中可能会对您的代码产生奇怪的影响.


Ami*_*mit 5

不在this标准C中使用的原因是它使您的代码:

  1. 由于thisC++中"众所周知"的使用,可读性稍差.您的代码看起来好像是C++,而不知情的读者很容易混淆.
  2. 不支持C++.如果您(或其他人)想要使用此代码并在C++编译中使用它,它将失败.这是一个缺点,同时也是一个好处,因为得到一个错误可能表明必须小心谨慎,哪些人不会让重要问题失误.