// filename: c2011-6-7-6-3-ex.c // original examples and/or notes: // (c) ISO/IEC JTC1 SC22 WG14 N1570, April 12, 2011 // http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf // C2011 6.7.6.3 Function declarators (including prototypes) // compile and output mechanism: // (c) Ogawa Kiyoshi, kaizen@gifu-u.ac.jp, December.xx, 2013 // compile errors and/or wornings: // 1 (c) Apple LLVM version 4.2 (clang-425.0.27) (based on LLVM 3.2svn) // Target: x86_64-apple-darwin11.4.2 //Thread model: posix // (c) LLVM 2003-2009 University of Illinois at Urbana-Champaign. // 2 gcc-4.9 (GCC) 4.9.0 20131229 (experimental) // Copyright (C) 2013 Free Software Foundation, Inc. #include // Example 1 int f1(void), *fip(), (*pfi)(); // Example 2 int (*apfi[3])(int *x, int *y); // Example 3 int (*fpfi(int (*)(long), int))(int, ...); // Example 4 void addscalar(int n, int m, double a[n][n*m+300], double x); int main() { double b[4][308]; addscalar(4, 2, b, 2.17); return printf("\n6.7.6.3 Function declarators (including prototypes) %f \n",b[0][0]); //return 0; } void addscalar(int n, int m, double a[n][n*m+300], double x) { for (int i = 0; i < n; i++) for (int j = 0, k = n*m+300; j < k; j++)// a is a pointer to a VLA with n*m+300 elements a[i][j] += x,printf("%d ",a[i][j]); } // Example 5 double maximum(int n, int m, double a[n][m]); double maximum(int n, int m, double a[*][*]); double maximum(int n, int m, double a[ ][*]); double maximum(int n, int m, double a[ ][m]); void f(double (* restrict a)[5]); void f(double a[restrict][5]); void f(double a[restrict 3][5]); void f(double a[restrict static 3][5]); // output may be // 2 256 512 768 1024 1280 1536 1792 2048 2304 2560 2816 3072 3328 3584 3840 4096 4352 4608 4864 5120 5376 5632 5888 6144 6400 6656 6912 7168 7424 7680 7936 8192 8448 8704 8960 9216 9472 9728 9984 10240 10496 10752 11008 11264 11520 11776 12032 12288 12544 12800 13056 13312 13568 13824 14080 14336 14592 14848 15104 15360 15616 15872 16128 16384 16640 16896 17152 17408 17664 17920 18176 18432 18688 18944 19200 19456 19712 19968 20224 20480 20736 20992 21248 21504 21760 22016 22272 22528 22784 23040 23296 23552 23808 24064 24320 24576 24832 25088 25344 25600 25856 26112 26368 26624 26880 27136 27392 27648 27904 28160 28416 28672 28928 29184 29440 29696 29952 30208 30464 30720 30976 31232 31488 31744 32000 32256 32512 32768 33024 33280 33536 33792 34048 34304 34560 34816 35072 35328 35584 35840 36096 36352 36608 36864 37120 37376 37632 37888 38144 38400 38656 38912 39168 39424 39680 39936 40192 40448 40704 40960 41216 41472 41728 41984 42240 42496 42752 43008 43264 43520 43776 44032 44288 44544 44800 45056 45312 45568 45824 46080 46336 46592 46848 47104 47360 47616 47872 48128 48384 48640 48896 49152 49408 49664 49920 50176 50432 50688 50944 51200 51456 51712 51968 52224 52480 52736 52992 53248 53504 53760 54016 54272 54528 54784 55040 55296 55552 55808 56064 56320 56576 56832 57088 57344 57600 57856 58112 58368 58624 58880 59136 59392 59648 59904 60160 60416 60672 60928 61184 61440 61696 61952 62208 62464 62720 62976 63232 63488 63744 64000 64256 64512 64768 65024 65280 65536 65792 66048 66304 66560 66816 67072 67328 67584 67840 68096 68352 68608 68864 69120 69376 69632 69888 70144 70400 70656 70912 71168 71424 71680 71936 72192 72448 72704 72960 73216 73472 73728 73984 74240 74496 74752 75008 75264 75520 75776 76032 76288 76544 76800 77056 77312 77568 77824 78080 78336 78592 78848 79104 79360 79616 79872 80128 80384 80640 80896 81152 81408 81664 81920 82176 82432 82688 82944 83200 83456 83712 83968 84224 84480 84736 84992 85248 85504 85760 86016 86272 86528 86784 87040 87296 87552 87808 88064 88320 88576 88832 89088 89344 89600 89856 90112 90368 90624 90880 91136 91392 91648 91904 92160 92416 92672 92928 93184 93440 93696 93952 94208 94464 94720 94976 95232 95488 95744 96000 96256 96512 96768 97024 97280 97536 97792 98048 98304 98560 98816 99072 99328 99584 99840 100096 100352 100608 100864 101120 101376 101632 101888 102144 102400 102656 102912 103168 103424 103680 103936 104192 104448 104704 104960 105216 105472 105728 105984 106240 106496 106752 107008 107264 107520 107776 108032 108288 108544 108800 109056 109312 109568 109824 110080 110336 110592 110848 111104 111360 111616 111872 112128 112384 112640 112896 113152 113408 113664 113920 114176 114432 114688 114944 115200 115456 115712 115968 116224 116480 116736 116992 117248 117504 117760 118016 118272 118528 118784 119040 119296 119552 119808 120064 120320 120576 120832 121088 121344 121600 121856 122112 122368 122624 122880 123136 123392 123648 123904 124160 124416 124672 124928 125184 125440 125696 125952 126208 126464 126720 126976 127232 127488 127744 128000 128256 128512 128768 129024 129280 129536 129792 130048 130304 130560 130816 131072 131328 131584 131840 132096 132352 132608 132864 133120 133376 133632 133888 134144 134400 134656 134912 135168 135424 135680 135936 136192 136448 136704 136960 137216 137472 137728 137984 138240 138496 138752 139008 139264 139520 139776 140032 140288 140544 140800 141056 141312 141568 141824 142080 142336 142592 142848 143104 143360 143616 143872 144128 144384 144640 144896 145152 145408 145664 145920 146176 146432 146688 146944 147200 147456 147712 147968 148224 148480 148736 148992 149248 149504 149760 150016 150272 150528 150784 151040 151296 151552 151808 152064 152320 152576 152832 153088 153344 153600 153856 154112 154368 154624 154880 155136 155392 155648 155904 156160 156416 156672 156928 157184 157440 157696 157952 158208 158464 158720 158976 159232 159488 159744 160000 160256 160512 160768 161024 161280 161536 161792 162048 162304 162560 162816 163072 163328 163584 163840 164096 164352 164608 164864 165120 165376 165632 165888 166144 166400 166656 166912 167168 167424 167680 167936 168192 168448 168704 168960 169216 169472 169728 169984 170240 170496 170752 171008 171264 171520 171776 172032 172288 172544 172800 173056 173312 173568 173824 174080 174336 174592 174848 175104 175360 175616 175872 176128 176384 176640 176896 177152 177408 177664 177920 178176 178432 178688 178944 179200 179456 179712 179968 180224 180480 180736 180992 181248 181504 181760 182016 182272 182528 182784 183040 183296 183552 183808 184064 184320 184576 184832 185088 185344 185600 185856 186112 186368 186624 186880 187136 187392 187648 187904 188160 188416 188672 188928 189184 189440 189696 189952 190208 190464 190720 190976 191232 191488 191744 192000 192256 192512 192768 193024 193280 193536 193792 194048 194304 194560 194816 195072 195328 195584 195840 196096 196352 196608 196864 197120 197376 197632 197888 198144 198400 198656 198912 199168 199424 199680 199936 200192 200448 200704 200960 201216 201472 201728 201984 202240 202496 202752 203008 203264 203520 203776 204032 204288 204544 204800 205056 205312 205568 205824 206080 206336 206592 206848 207104 207360 207616 207872 208128 208384 208640 208896 209152 209408 209664 209920 210176 210432 210688 210944 211200 211456 211712 211968 212224 212480 212736 212992 213248 213504 213760 214016 214272 214528 214784 215040 215296 215552 215808 216064 216320 216576 216832 217088 217344 217600 217856 218112 218368 218624 218880 219136 219392 219648 219904 220160 220416 220672 220928 221184 221440 221696 221952 222208 222464 222720 222976 223232 223488 223744 224000 224256 224512 224768 225024 225280 225536 225792 226048 226304 226560 226816 227072 227328 227584 227840 228096 228352 228608 228864 229120 229376 229632 229888 230144 230400 230656 230912 231168 231424 231680 231936 232192 232448 232704 232960 233216 233472 233728 233984 234240 234496 234752 235008 235264 235520 235776 236032 236288 236544 236800 237056 237312 237568 237824 238080 238336 238592 238848 239104 239360 239616 239872 240128 240384 240640 240896 241152 241408 241664 241920 242176 242432 242688 242944 243200 243456 243712 243968 244224 244480 244736 244992 245248 245504 245760 246016 246272 246528 246784 247040 247296 247552 247808 248064 248320 248576 248832 249088 249344 249600 249856 250112 250368 250624 250880 251136 251392 251648 251904 252160 252416 252672 252928 253184 253440 253696 253952 254208 254464 254720 254976 255232 255488 255744 256000 256256 256512 256768 257024 257280 257536 257792 258048 258304 258560 258816 259072 259328 259584 259840 260096 260352 260608 260864 261120 261376 261632 261888 262144 262400 262656 262912 263168 263424 263680 263936 264192 264448 264704 264960 265216 265472 265728 265984 266240 266496 266752 267008 267264 267520 267776 268032 268288 268544 268800 269056 269312 269568 269824 270080 270336 270592 270848 271104 271360 271616 271872 272128 272384 272640 272896 273152 273408 273664 273920 274176 274432 274688 274944 275200 275456 275712 275968 276224 276480 276736 276992 277248 277504 277760 278016 278272 278528 278784 279040 279296 279552 279808 280064 280320 280576 280832 281088 281344 281600 281856 282112 282368 282624 282880 283136 283392 283648 283904 284160 284416 284672 284928 285184 285440 285696 285952 286208 286464 286720 286976 287232 287488 287744 288000 288256 288512 288768 289024 289280 289536 289792 290048 290304 290560 290816 291072 291328 291584 291840 292096 292352 292608 292864 293120 293376 293632 293888 294144 294400 294656 294912 295168 295424 295680 295936 296192 296448 296704 296960 297216 297472 297728 297984 298240 298496 298752 299008 299264 299520 299776 300032 300288 300544 300800 301056 301312 301568 301824 302080 302336 302592 302848 303104 303360 303616 303872 304128 304384 304640 304896 305152 305408 305664 305920 306176 306432 306688 306944 307200 307456 307712 307968 308224 308480 308736 308992 309248 309504 309760 310016 310272 310528 310784 311040 311296 311552 311808 312064 312320 312576 312832 313088 313344 313600 313856 314112 314368 314624 314880 315136 // 6.7.6.3 Function declarators (including prototypes) 2.170000