c - 创建具有重复名称的函数
问题描述
我的任务是popen()
使用已经完成的 Pipes 创建一个函数。问题是该函数还必须命名为 popen,而不是 mypopen 或 popen2 等。
我正在寻找一个人来指导我如何实现这一目标。
目前我有一个头文件 popen.h 和我创建的另一个文件 popen.c。
popen.h 刚刚有
void popen(char *arr[]);
而 popen.c 具有实际的 popen 函数代码(有效,只是在函数名称为 popen 时无效)。
目前,当我的函数被称为 popen 时,我在编译时遇到了先前的声明错误。
如何让编译器在我的和 stdio.h 版本这两个不同的 popen 函数之间进行选择。
解决方案
就#define popen my_popen
在声明、定义和使用您的函数之前,但在包含<stdio.h>
.
弹出.h
#define popen my_popen
void popen(char *arr[]);
popen.c
#include <stdio.h>
#include "popen.h"
void popen(char *arr[]){ printf("that's NOT the stdio's popen\n"); }
主程序
#include <stdio.h>
#include "popen.h"
int main(void){
popen(0); printf("done\n");
}
同样,如果您真的想要一个名为的符号,您可以通过在包含之前定义和之后取消popen
定义popen
来隐藏标准输入输出:stdio_popen
<stdio.h>
popen
#define popen stdio_popen
#include <stdio.h>
#undef popen
void popen(char *arr[]){ printf("that's NOT the stdio's popen\n"); }
int main(void){
popen(0); printf("done\n");
}
$ nm a.out | grep popen
0000000000001160 T popen
这种讨厌的技巧只有在必须组合污染彼此名称空间的讨厌的源代码时才有用。popen()
命名您刚刚编写的函数而不是其他名称的理由为零,除非它是一个插入式替换,具有与标准函数相同的接口。
推荐阅读
- python - 过滤两个日期之间的数据 - Django
- spring-boot - GCP Dialogflow Java-SpringBoot 身份验证-应用程序默认凭据不可用
- python - XPath 增量与 Python
- javascript - 我在猫鼬中创建新数据时遇到问题,因为我总是得到代码 11000
- testing - 在 LocalDateTime 上使用 @RestClientTest 进行测试时,RestTemplate 的行为有所不同
- javascript - javascript ile链接çektirme
- vulkan - 是否可以选择 Vulkan 计算着色器从一组数据的哪一部分开始?
- django - 嵌套 JSON 文件中的 DjangoFilterBackend 过滤器
- javascript - 运行 yarn install 时出现 ENOTFOUND registry.yarnpkg.com 错误
- kdb - 访问 kdb+/Q 中的子文件夹