c - 将匿名参数传递给 C 中的函数

标签 c gcc

<分区>

我可以在 ubuntu-64 位上使用 gcc 以下列方式将参数传递给 C 中的函数,而不会出现任何警告或错误:

void func(char* test){
    // do something here
}

void main() {
    func((char*) "smaps");
}

除了一个关于 C++ 的类似问题的评论外,我没有找到很多关于将匿名参数传递给 C 函数的示例。我正在考虑在我的代码中使用这种技术(很多),这些代码将在多个可用的 AMD64/ARM 设备上编译(主要是基于 debian 的操作系统)。我的问题是,这是特定于编译器的吗?

gcc --version 的输出:

$ gcc --version
gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406

更新:尽管我认为 4386427 对我来说已经足够好了,但由于该问题被搁置,我会对其进行更多解释。我有一个脚本,它多次调用以 char** 作为参数的特定函数。我认为我需要单独显式声明一个 char** 并在每次调用函数时按名称将其传递给函数。我认为声明一个字符串并同时将其传递给函数会更方便;类似于:

func( (char**) {"first_string", "second_string"} ). 

我最初担心的是,这在 C 中是否普遍允许,或者这是特定于编译器的功能? 4386427 的回答表明它不是特定于编译器的,但是我应该注意传递给函数的 char** 是不可变的。

最佳答案

C 中的所有参数都是按值传递的。没有关于值来自的原始对象的信息被传递给被调用的函数。从这个意义上讲,所有 C 参数都是匿名的;没有传递有关调用函数中使用的标识符的信息。

func((char*) "smaps"); 中,字符串文字 "smaps" 被转换为指向 char 的指针.只有指针的值被传递给func。这是标准的 C。

(如果您确实想将有关对象的信息传递给函数,则必须手动执行此操作。例如,您可以获取对象的地址并将结果指针传递给函数。或者您可以传递数字将数组中的元素连同第一个元素的地址传递给一个函数。)

(在 C 语言中,"smaps" 之类的字符串文字会自动转换为指向其第一个字符的指针,因此您无需使用 char * cast. [当字符串文字是 sizeof_Alignof& 的操作数或当它是用于初始化数组。])

关于c - 将匿名参数传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085126/

相关文章:

c - 如何在文件末尾自动追加换行符

python - 在 Windows 7(64 位)上使用 Cython 和 MinGW 编译 Python 3.5 代码

c++ - 来自 gcc 原子 header 的对我的类静态字段错误的 undefined reference

c - 是否有任何 C 标准中定义的通用 printf-ish 例程

c - 如何停止无限循环?

c - 结构程序停止,没有任何错误

c++ - supc++ 的链接顺序真的很重要吗?

objective-c - 如何在 Objective-C (cocoa) 中删除二维数组

c - 简单的 "for loop"在C中没有计算出正确的数字

c++ - 为什么这个函数调用在通过类型转换的函数指针调用它后表现得很好?