Tag: 头文件

不包括#include

我编写了以下程序而不包括#include 。 我能够执行该程序。 这些原型在哪里宣布? 我正在使用gcc 。 1。 #include int main() { if(isalnum(‘;’)) printf(“character ; is not alphanumeric”); if(isalnum(‘A’)) printf(“character A is alphanumeric “); return 0; } 2。 #include int main() { printf(“Lower case of A is %c \n”, tolower(‘A’)); printf(“Lower case of 9 is %c \n”, tolower(‘9’)); printf(“Lower case of g is %c \n”, tolower(‘g’)); […]

如何在C中实现stdarg

为了好奇,我想为标准C库中的一些函数编写最小的替换。 到目前为止,我已经完成了printf() , strlen() , strcpy() , memcpy() , memset()等…但是当我尝试使用printf函数时,我不知道如何实现stdarg.h ! 我能做到这一点的方式是什么? 它是使用宏还是实际function? 我在32位x86上使用gcc OR clang ,如果它有助于使这更容易回答。

多个目录中的头文件:最佳实践

我是C Newb 我用动态语言(javascript,python,haskell等)写了很多代码,但我现在正在为研究生院学习C,我不知道我在做什么。 问题 最初我使用makefile在一个目录中构建我的所有源代码,该代码运行得相当好。 但是,我的项目正在增长,我想将源分成多个目录(unit testing,工具,核心等)。 例如,我的目录树可能如下所示: . |– src | |– foo.c | |– foo.h | `– main.c `– test `– test_foo.c test/test_foo.c使用src/foo.c和src/foo.h test/test_foo.c 使用makefile,构建它的最佳/标准方法是什么? 优选地,将存在用于构建项目的一个规则和用于构建测试的规则。 注意 我知道还有其他方法可以做到这一点,包括autoconf和其他自动解决方案。 但是,我想了解发生了什么,并且能够从头开始编写makefile,尽管它可能不切实际。 任何指导或提示将不胜感激。 谢谢! [编辑] 所以到目前为止给出的三个解决方案如下: 将全局使用的头文件放在并行include目录中 使用#include声明中的路径,如#include “../src/foo.h” 使用-I开关通知编译器包含位置 到目前为止,我喜欢-I switch解决方案,因为它不涉及在目录结构更改时更改源代码。

C结构中的不完整类型

我有以下项目结构: 文件 – 啊 #pragma once struct best_fit_struct { void *next; size_t size; }; 档案 – bh #pragma once typedef struct mm_t { int type; union { struct best_fit_struct best_fit_mm; } per_mm_struct; void *memory; } mm_t; 文件 – bc #include “ah” #include “bh” 在使用gcc -c bc编译bc时,它会抛出以下错误 file best_fit_mm has incomplete data type 我在bh之前已经包括ah ,所以顺序看起来对我来说很合适。 令人惊讶的是,如果我在bh包含ah […]

C编译器是否能够跨目标文件进行优化?

我正在考虑标题与标题和源代码设计之间的关系。 我不确定标头和源是否允许编译器跨目标文件和链接进行优化? 内联优化?

目标c – 导入.m和.h文件 – 它做了什么

在目标c中,当你说#import“MyClass.h”时实际发生了什么? (编译器是否为您复制了什么?) 在MyClass.m文件中,如果我#import “UsefulClass.h” ,这意味着UsefulClass在此文件下可用,我可以创建对象并将消息发送到它的实例。 在myClass.m文件中,我必须#import “MyClass.h” ,这听起来像是将我的实现文件链接到它的标题(称为基本文件?),这与第一个文件的作用完全不同。 那么#import会根据具体情况做两种不同的事情吗? 或者从另一个角度来看它实际上属于一个类别。 .m文件中定义但不在.h文件中定义的方法被视为私有。 从另一个类,我可以以某种方式调用私有方法吗? (比如我#import .m而不是.h?所以类会知道实现文件定义的内容。) objective-c #import和c #include什么区别? 另外@interface MyClass : NSObject在.h文件中使用@interface MyClass : NSObject ,在.m文件中使用@interface MyClass() 。 当你想拥有私有属性时,它只是一种语法格式(如括号)吗? 或者这背后有什么逻辑吗?

C中的#import和#include有什么区别?

我已经阅读了一些关于预处理器指令的内容,并且我已经看到#import在C程序中被使用了几次。 我不确定它们之间有什么区别,有些网站说#include只用于头文件,而#import在Java中使用更多,在C中不推荐使用。 如果是这种情况,为什么有些程序仍然使用#import,它与#include有何不同? 另外,我在我的一些C程序中使用了#import,它看起来工作得很好并且与#include做同样的事情。

“’sockaddr_in’未声明(在此函数中首次使用)”错误,尽管包含必需的标题

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BACKLOG 10 void * get_in_addr(struct sockaddr *sa){ if(sa->sa_family == AF_INET){ return &((sockaddr_in *)sa)->sin_addr; } else if(sa->sa_family == AF_INET6){ return &((sockaddr_in6 *)sa)->sin6_addr; } } 我在我的代码中使用sockaddr_in结构来判断传入连接是IPv4还是IPV6地址。 尽管在我的代码中包含netinet / in.h头文件,但我收到错误“’sockaddr_in’未声明(在此函数中首次使用)”。 有没有我在这里看不到的东西?

何时在一个文件中多次包含相同的标题是有用的?

我正在阅读一个文件中相同标题的多个包含,并找到一个有趣的声明( 链接 ): 如果您有意多次包含头文件,那么有两个带头文件的技巧(这实际上提供了一个有用的function)。 据我所知,这些技巧可能在实际项目中不受欢迎和困惑(特别是因为人们会采取预防措施来防范多种内容,例如包括警卫和#pragma once )。 但是,那些技巧是什么? 我提出了一些想法,但希望看到一些实际的例子(理想情况下,安全和尝试)。 我的想法: C中的伪模板,其中模板参数被预处理器定义替换。 它可以在没有包含的情况下完成,但function可能太大或太多,因此制作单独的文件是有意义的。 逐块结构/类构造(连接片段)。 在使用公共成员定义结构时,它可以帮助模拟C中的inheritance并防止代码重复。 查找表和其他编译时数据结构(同样,借助预处理器定义)。

在C中定义数组

我有几个450元素字符数组(存储在lcd屏幕上显示的位图数据。)我想将它们放在头文件下并#define它们,但我不断收到编译错误。 我怎么用C做这个? #define numbers[450] {0, 1,etc…} #define numbers {0, 1, etc…} #define numbers[450]然后设置数字 还有很多…