Tag: c99

大多数嵌入式C编译器如何定义内存映射I / O的符号?

我经常写这样的内存映射I / O引脚 P3OUT |= BIT1; 我以为我的预处理器正在用这样的东西替换P3OUT: *((unsigned short *) 0x0222u) 但我今天挖了一个H文件,看到了这些内容: volatile unsigned short P3OUT @ 0x0222u; 在此之前还有一些扩展,但通常是这样。 正在使用符号’@’。 除此之外,还有一些关于使用扩展的C语言集的#pragma。 我假设这是链接器的某种指令,并且有效地将符号定义为存储器映射中的该位置。 我的假设是否适合大多数编译器的大部分时间? 这种方式或其他方面有关系吗? 那个@符号来自哪里,它是某种标准吗? 我正在使用IAR Embedded工作台。 这个问题类似于这个问题: 如何将变量放在内存中的给定绝对地址(使用GCC) 。 它符合我认为编译器正在做的事情。

C99删除stricmp()和strnicmp()?

是否在C99中删除了stricmp()和strnicmp()函数? 当我尝试针对C99编译时,我总是得到警告隐式声明函数stricmp() (以及strnicmp() )。 例如,下面的简单代码让我发出警告。 #include #include char arr[100]=”hello”; char arr2[100]=”hEllo”; int main() { int n=-1; printf(“%d\n”,n); n=strnicmp(arr,arr2,3); // the same when use the function stricmp(); printf(“%d\n”,n); getchar(); return 0; } 当我尝试针对C99( gcc -Wall -std=c99 main.c -o main )编译这段代码时,我收到了警告。 但是当我在没有-std=c99情况下编译它时,不会抛出任何警告。 但是,即使存在隐式声明的警告,我的代码仍然正常。 这是为什么? 那是一个错误吗? 如果不是一个错误,那么C99的变化究竟发生了什么?

为什么fgets卡在回车上\ r?

我是新来的论坛和c一般,所以请耐心等待我。 我正在尝试编写一个带有文本文件并解析所有单词和字符的ac程序,然后将它们保存到输出文本文件中。 我正在使用C99,Windows 7-64bit,MinGW,记事本,记事本++和用于txt文件的ASNI格式。 我已经读过fgets()比fscanf用于读取输入更好,因为它有缓冲区溢出保护,所以我决定尝试使用它,但它在测试文件中有一些标点符号的问题(我认为这是回车\ r)。 我尝试使用fscanf,除了它跳过所有空格(我可以在以后添加,不关心它),它似乎接受所有文本就好并将其打印在输出文件中。 这是我的测试代码: #include #include #include #include #include void main(int argc, char* argv[]) { int limit=100, flimit=0, flimitmax=1900000000; //I stopped flimitmax short of the 2GB mark char name[limit], copyname[limit]; FILE *data, *output; //Gets the value of a specified data file for reading printf(“\nPlease specify a file to format for data […]

写入具有不同文件名的单独文件

这就是我想要实现的目标: 假设用户输入是: 生成随机实例…… 输入电路板尺寸MAX_X MAX_Y:100 200 输入点数NUM_PT:10 输入要生成的随机实例数:7 你的程序将生成总共7个实例,写入7个单独的文件“instance10_j.txt”,对于j = 1,2,3,…每个实例都有矩形区域[0; 100] X [0; 200],并且有10分。 在矩形区域内均匀地随机生成点的坐标。 并且您的程序确保每个实例中没有重复点。 如果程序无法生成这些文件,请打印出错误并退出。 所有这些文件都保存在执行命令的当前目录中,程序将打印到屏幕上: instance10_1.txt生成 instance10_2.txt生成 instance10_3.txt生成 instance10_4.txt生成 instance10_5.txt生成 instance10_6.txt生成 instance10_7.txt生成…完成! 这是我到目前为止所做的: int writetofile(max_X, max_Y, numpt, random_inst); int main(int argc, char *argv[]) { FILE *fp; int max_x, max_y, num_pt, rand_inst; int *x_coordinate, *y_coordinate; int inputfile = 0, outputfile = 0; […]

将此代码行转换为C.

我有以下代码行: for ( int i = index; i size; ++i ) //i,index and size are integers.al is an arraylist 当我在C中编译它时,我得到错误: ‘for’ loop initial declarations are only allowed in C99 mode 我不知道如何解决这个问题。 谢谢!

如何将变量参数Functioncall作为宏定义?

想象一下,我有一个调试源文件,如下所示: #if _OWN_DEBUG_LEVEL != 0 void DebugLogMsg (DebugStruct_t *DebugStruct, size_t sizeID, char const *szFormat, …); #else #define DebugLogMsg(_Expression1, _Expression2, _Expression3) ((void)0) #endif 在这种情况下,我并不真正关心函数的其他参数,但是这个案例呢? #if _OWN_DEBUG_LEVEL > 0 #undef DebugLogMsg1 #define DebugLogMsg1(_Expression1, _Expression2, _Expression3) \ DebugLogMsg(_Expression1, _Expression2, _Expression3) #endif 在这种情况下,我不太确定…当我像这样调用宏时: DebugLogMsg1(pointer, var, pointer, 1, 2, 3); 将_Expression3视为pointer, 1, 2, 3或什么是确切的行为?

将数字存储为(x,y)从特定点的文件中进行控制

我有一个实例文件 ,我需要以2Darrays系统的forms存储NUM_PT和所有相应的坐标( 个人选择,以便我可以轻松访问它们 )。 我能够检索NUM_PT但我仍然在阅读连续的坐标到我的数组中。 这是我做的 /* Assignment 2 */ #include #include #include #include #include #define MAXS 256 int main(int argc, char *argv[]) { int num_pt; int inputfile = 0, outputfile = 0, i; for (i = 1; i %s [-i inputfile [-o outputfile]]\n\n”, argv[0]); exit(0); } FILE *fp; fp = fopen(argv[inputfile], “r”); int count […]

Eclipse无法读取RenderScript .rs文件的代码格式

我有一个非常好的Android知识(1年的开发),现在我正在尝试学习Android RenderScript API(但没有太多的文档),无论如何,我遇到了一些问题。 我了解到我们需要在project.propert上添加以下行: renderscript.target=19 renderscript.support.mode=true 我在com.mypackage.script创建了一个名为FireworkScript的.rs文件,其中包含以下内容: #pragma version(1) #pragma rs java_package_name(com.mypackage.script) #include “rs_graphics.rsh” int root(){ return 0; } void init(){ } 我在使用RenderScript v8支持库时遇到了一些问题,但我通过手动将renderscript-v8.jar添加到我的项目来修复它( 构建路径>>配置构建路径>>库>>添加外部JAR ) 正如所料,Eclipse在gen文件夹中生成ScriptC_FireworkScript.java ,在bin / res / bc / raw生成fireworkscript.bc 但问题是 :Eclipse没有“读取”.rs文件中的代码,使用eclipse对此文件进行写入与在任何单个文本编辑器上进行写入相同。 我知道上面的示例需要一个内核,但是如果Eclipse没有读取它的代码格式,我该怎么写呢? 我知道C中的简单typedef struct构造函数,但我不熟悉C99中的内核声明和参数 我只能使用project > clean找到错误,它似乎“刷新”编译器,但无论如何,我没有任何识别帮助,文本着色,任何东西,只有一个带有黑色文本的文件,我该怎么办解决这个问题? 我还尝试使用Dev C ++和Notepad ++打开.rs文件,但我得到了相同的结果。 也许我的机器不知道C99代码格式化? 有什么我可以做的吗? 提前致谢。 我正在使用Eclipse Luna和ADT插件,目前在23.0.2上使用SDK构建工具,所有内容都更新到最新版本。

如何保存typeof的结果?

我是一个新的程序员,主要使用Code :: Blocks for C 99 。 我最近发现了typeof()因为它被隐藏为__typeof __(),我想知道你是否可以因typeof而保存一个类型。 就像是: type a = __typeof__(?); 要么 #define typeof __typeof__ type a = typeof(?); 这可能吗?

局部变长数组

在C ++中的一些代码重构期间,我遇到了以下局部变量长度数组 void some_function(uint8_t length, uint8_t id, uint8_t * bytes)) { uint8_t string[length + 8]; //some transformation on string [1-8] elements do_something(string); } 我不熟悉C99,但是使用可变长度数组大小[x + y]看起来像将放在堆中。 此外,我调试此函数,以确保此“字符串”变量放在堆上,它是。 在C中,局部变量不能是固定大小,因此在使用它们之后不需要清理它们。 但是这里我们有固定大小的数组而没有内存分配,所以不需要在这个变量之后清理,但是GCC编译器如何管理这个内存? 或者也许以其他方式澄清我在这里考虑的内容:长度变量来自外部IO所以在我看来可能存在安全问题(例如当长度为INTEGER_MAX值时),除了检查长度大小还有其他什么行动可以这里有安全代码吗? 或者它可能已经安全了?