在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
是否需要#include某个文件,如果在标题(*.h)内,使用此文件中定义的类型?
例如,如果我使用GLib并希望gchar在我的标题中定义的结构中使用基本类型,是否有必要执行a #include <glib.h>,知道我已经在我的*.c文件中有它?
如果是,我还必须把它放在#ifndef和#define之后#define?
我正在使用TCP将文件从客户端发送到服务器.为了标记文件的结尾,我想在实际数据之前发送文件大小.所以我使用stat系统调用来查找文件的大小.这是类型off_t.我想知道它占用了多少字节,以便我可以在服务器端正确读取它.它定义于 <sys/types.h>.但我不明白这个定义.它只是定义__off_t or _off64_t为off_t.在哪里寻找__off_t?它__也是为头文件中的大部分内容添加前缀的约定,当我读取头文件以更好地理解时会让我感到害怕.如何更好地阅读头文件?
#ifndef __off_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define __off_t_defined
#endif
Run Code Online (Sandbox Code Playgroud) 如何在此结构的定义中指向下一个结构的指针:
typedef struct A {
int a;
int b;
A* next;
} A;
Run Code Online (Sandbox Code Playgroud)
这是我第一次写它但它不起作用的方式.
下面的程序将字符串转换为long,但根据我的理解,它也会返回错误.我依赖的事实是,如果strtol将字符串成功转换为long,那么第二个参数strtol应该等于NULL.当我用55运行以下应用程序时,我收到以下消息.
./convertToLong 55
Could not convert 55 to long and leftover string is: 55 as long is 55
Run Code Online (Sandbox Code Playgroud)
如何成功检测strtol的错误?在我的应用程序中,零是有效值.
码:
#include <stdio.h>
#include <stdlib.h>
static long parseLong(const char * str);
int main(int argc, char ** argv)
{
printf("%s as long is %ld\n", argv[1], parseLong(argv[1]));
return 0;
}
static long parseLong(const char * str)
{
long _val = 0;
char * temp;
_val = strtol(str, &temp, 0);
if(temp != '\0')
printf("Could not convert %s to long and …Run Code Online (Sandbox Code Playgroud) 我正在读K&R书.我读:
...仅供标准库函数使用的名称,
_因此它们不太可能与用户程序中的名称冲突...
这究竟意味着什么,请解释真实简单实用的方法.
我的理解是:
如果我想使用math.h中定义的sqrt那么
#include <math.h>
#define sqrt(x) x*x*x
main()
{
int x=4;
_sqrt(x); // That is from the header file math.h
sqrt(x); // my own defined macro
/*or its the reverse way _sqrt for my own defined macro so it won't collide with original sqrt i.e. without _ for sqrt from math.h */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,我使用了在stackoverflow上读取代码__.sys/syscall.h在Windows中不存在,所以我们必须使用
#if __linux
#include <sys/syscall.h>
#elif defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)
确切__使用的地方和b/w __&的区别_ …
这两个声明之间的区别是什么,并且优先于另一个?
typedef struct IOPORT {
GPIO_TypeDef* port;
u16 pin;
} IOPORT;
typedef struct {
GPIO_TypeDef* port;
u16 pin;
} IOPORT;
Run Code Online (Sandbox Code Playgroud) 我最近开始用C学习网络,我看到一些以下划线开头的函数_function() - 这究竟是什么意思?我也看到了这个:
struct sockaddr_in {
__SOCKADDR_COMMON (sin_);
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
Run Code Online (Sandbox Code Playgroud)
这部分代码意味着什么:
__SOCKADDR_COMMON (sin_);
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
Run Code Online (Sandbox Code Playgroud) 我正在编写一个C程序并使用gcc 4.4.6进行编译.我不想使用c ++编译器.
我正在实现一个组件,我打算在运行时实时拥有该组件的多个实例并由其他组件拥有.
作为一种将接口的定义与其实现分离并隐藏它在该实现中使用的内部结构和数据类型的方法,我希望使用前向结构声明.
接口文件:component.h
struct _hidden_implementation_type;
typedef struct _hidden_implementation_type visible_type_to_clients;
int component_function1(visible_type_to_clients instance);
Run Code Online (Sandbox Code Playgroud)
实现文件:component.c
struct _hidden_implementation_type
{
int foo;
};
Run Code Online (Sandbox Code Playgroud)
客户端文件:main.c
int main(int argc, char** argv)
{
visible_type_to_clients a;
return component_function1(a);
}
Run Code Online (Sandbox Code Playgroud)
我该如何工作?还有什么其他方法可以允许多个组件实例化,并提供公共接口和实现之间的解耦?
c ×8
c++ ×3
networking ×2
sockets ×2
struct ×2
c++-faq ×1
directory ×1
function ×1
header-files ×1
include ×1
namespaces ×1
pointers ×1
standards ×1
typedef ×1
types ×1