Просто #define popen my_popen
до объявления, определения и использования вашей функции, но после включения <stdio.h>
.
popen.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"); }
main. c
#include <stdio.h>
#include "popen.h"
int main(void){
popen(0); printf("done\n");
}
Аналогично, вы можете скрыть STDIO 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()
, а не что-то другое, если только это не замена с заменой, с тем же интерфейсом, что и у стандартной.