c - 为什么这些静态函数在它们的文件之外工作?
问题描述
我在名为 Grafico.h 的文件中定义了接下来的两个静态函数。
static inline interface_t * obtener_intf_por_nombre(nodo_t *nodo, char *nombre_if) {
for (int i = 0; i < MAX_INTF_POR_NODO; ++i)
{
if(!nodo->intf[i]) return NULL;
if(strncmp(nodo->intf[i]->nombre_if, nombre_if, TAM_NOMBRE_IF) == 0) {
return nodo->intf[i];
}
}
return NULL;
}
static inline nodo_t * obtener_nodo_por_nombre(grafico_t *topologia, char *nombre_nodo) {
return obtener_elemento(topologia->lista_nodos, nombre_nodo);
}
在我的主文件中,我调用了这些函数而不记得它们是静态的,并且我没有从编译器那里得到任何与它相关的警告或错误。
#include <stdio.h>
#include "Net.h"
#include "Grafico.h"
#include "Topologias.h"
#include "CommandParser/libcli.h"
#include "clired.c"
extern grafico_t *const_primera_topo();
grafico_t *topo = NULL;
int main(void) {
inic_cli_red();
topo = const_primera_topo();
sleep(2);
nodo_t *nodo_trans = obtener_nodo_por_nombre(topo, "R0");
interface_t *interface_trans = obtener_intf_por_nombre(nodo_trans, "ethR0/0");
char *mensaje = "Este es un mensaje de prueba\0";
printf("Llegamos hasta aquí señores. Fue un honor.\n");
enviar_paquete(mensaje, strlen(mensaje), interface_trans);
start_shell();
return 0;
}
如果它有用,这是我的makefile。
TARGET = $(BIN_DIR)/sim_tcp_ip
LIBS = -lpthread -L ./CommandParser -lcli -lrt
OBJS = $(OBJ_DIR)/prueba.o \
$(OBJ_DIR)/ListaEnlazadaGenerica.o \
$(OBJ_DIR)/Grafico.o \
$(OBJ_DIR)/Net.o \
$(OBJ_DIR)/Topologias.o \
$(OBJ_DIR)/Com.o \
$(OBJ_DIR)/Utiles.o \
$(OBJ_DIR)/Capa2.o
BIN_DIR = ./bin
OBJ_DIR = ./obj
INC_DIR = ./inc
SRC_DIR = ./src
CFLAGS = -g -lpthread -Wall -I$(INC_DIR)
$(TARGET): $(OBJS) CommandParser/libcli.a
mkdir -p $(BIN_DIR)
gcc $(CFLAGS) $(OBJS) -o $(TARGET) $(LIBS)
$(OBJ_DIR)/%.o : %.c
mkdir -p $(OBJ_DIR)
gcc -c -MD $(CFLAGS) $< -o $@
CommandParser/libcli.a:
(cd CommandParser; make)
-include $(OBJ_DIR)/*.d
.PHONY: clean
clean:
rm -rf $(OBJ_DIR) $(BIN_DIR)
(cd CommandParser; make clean)
all:
make
这些静态函数的定义有问题吗?
解决方案
当您#include
创建一个文件时,它相当于复制粘贴该文件的内容来代替该行。因此,这些static
函数位于同一个编译单元中,因此与您在文件本身static
中定义的任何其他内容一样可用。.c
推荐阅读
- date - 如何设置 Highcharts 图的最小开始日期?
- arrays - 我正在尝试更改 MATLAB 中离散函数的时间尺度
- cmake - CMAKE 和 SFML 2.5.1 缺少依赖项
- java - Android kotlin / java - ReclerView 在将部件隐藏在 holder / xml 时的奇怪行为
- android - 离子构建失败,“任务':processDebugResources'执行失败”
- python - 如何使用另一个模块的主要功能
- verilog - 七段显示器的 Verilog 代码错误
- sql - 在过程中的 oracle 语句中插入错误
- azure - 此警报在哪里定义“警报:平均服务器异常”?
- docker - Docker忽略本地DNS设置